NOI 1.10 编程基础之简单排序答案 C++

接下来这一段代码完全可以造福你,经过提交为AC准确无误!

#1.谁考了第k名
首先这一道题简单来说还是使用结构体较为简便。结构体常考题目主要就是排序,因此要有函数基础。结构体struct排序时使用的自定义函数cmp起到了升序与降序的重要作用。
(在这里我对直接使用数组的人致以崇高的敬意!)

#include<bits/stdc++.h>
using namespace std;
struct student{int id;double score;
};
int cmp(student a,student b){   //排序的时候怎么比较 return a.score > b.score;   //什么情况不用交换
}
int main(){int n,k;student stu[105];cin>>n>>k;for(int i=1;i<=n;i++) cin>>stu[i].id>>stu[i].score;sort(stu+1,stu+1+n,cmp);cout<<stu[k].id<<' '<<stu[k].score;
}

#2.奇数单增序列
这一道题含金量挺大,解决方式多,这里提供几种解决方式
(1) 选择排序

#include<bits/stdc++.h>
int a[501],n,t;
using namespace std;
int main(){cin>>n;for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<n-1;i++){int min=a[i],idx=i;for(int j=i+1;j<n;j++){if(a[j]<min){//如果遇到更小值进行更新min=a[j],idx=j; }}//把最小值和a[i]交换t=a[i];a[i]=a[idx];a[idx]=t; }
(2) 冒泡排序
#include<bits/stdc++.h>
int a[501],n,t;
using namespace std;
int main(){cin>>n;for(int i=0;i<n;i++) cin>>a[i];for(int i=0;i<n;i++)                               //从i开始冒泡for(int j=0;j<n-1;j++)                            //a[j]和a[j+1]比较 if(a[j]>a[j+1]) t=a[j],a[j]=a[j+1],a[j+1]=t;
(3) 懒人专用:sort函数
sort(a,a+n);

完整代码如下:

#include<bits/stdc++.h>
int a[501],n,t;
using namespace std;
int main(){cin>>n;for(int i=0;i<n;i++) cin>>a[i];
//  //选择排序
//  for(int i=0;i<n-1;i++){//      int min=a[i],idx=i;
//      for(int j=i+1;j<n;j++){//          if(a[j]<min){                                //如果遇到更小值进行更新
//          min=a[j],idx=j;
//          }
//      }
//      //把最小值和a[i]交换
//      t=a[i];a[i]=a[idx];a[idx]=t;
//  }// //冒泡排序
//  for(int i=0;i<n;i++)                              //从i开始冒泡
//      for(int j=0;j<n-1;j++)                            //a[j]和a[j+1]比较
//          if(a[j]>a[j+1]) t=a[j],a[j]=a[j+1],a[j+1]=t;// //sort函数 sort(a,a+n); int i=0;while(a[i]%2==0) i++;cout<<a[i++];for(;i<n;i++){if(a[i]%2) cout<<","<<a[i];}
}

#3成绩排序
第一道题谁考了第k名的升级版,最大的不同仍然是在处理sort函数中自定义函数cmp的内容。

#include<bits/stdc++.h>
using namespace std;
struct student{string name;double score;
};
int cmp(student a,student b){//先成绩,后名字 if(a.score>b.score) return 1;          //1是不用换 else if(a.score<b.score) return 0;       //0需要交换 else return a.name<=b.name;             //什么情况不用交换
}
int main(){int n;student stu[105];cin>>n;for(int i=1;i<=n;i++) cin>>stu[i].name>>stu[i].score;sort(stu+1,stu+1+n,cmp);for(int i=1;i<=n;i++) cout<<stu[i].name<<' '<<stu[i].score<<endl;
}

#4奖学金
同上,不过这一次程序写的有点无脑,不过能看懂就行,仍然是一道对排序带有情感的一道题。

#include<bits/stdc++.h>
using namespace std;
int main(){int i,n,j,t,x,y,a[305]={0},b[305]={0},c[305]={0};scanf("%d",&n);for (i=1;i<=n;i++){scanf("%d%d%d",&b[i],&x,&y);a[i]=i;c[i]=b[i]+x+y;}for (i=1;i<n;i++) for(j=1;j<=n-i;j++) if(c[j]<c[j+1]||c[j]==c[j+1]&&b[j]<b[j+1]||c[j]==c[j+1]&&b[j]==b[j+1]&&a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;t=b[j];b[j]=b[j+1];b[j+1]=t;t=c[j];c[j]=c[j+1];c[j+1]=t;}for (i=1;i<=5;i++)printf("%d %d\n",a[i],c[i]);
}

莫要追究…

#5分数线划定
一开始看到的时候还有点儿懵,后来发现没那么复杂,就是被字吓到了。

#include<bits/stdc++.h>
using namespace std;
int main(){int i,j,n,m,a[5001],b[5001],x=0,y=0,c=0,z=0,l=0;cin>>n>>m;x=m*1.5;for(i=1;i<=n;i++)cin>>a[i]>>b[i];for(i=1;i<n;i++){for(j=i+1;j<=n;j++){if(b[i]<b[j] || (b[i]==b[j] && a[i]>a[j])){z=b[i];b[i]=b[j];b[j]=z;l=a[i];a[i]=a[j];a[j]=l;y=b[x];}}}for(i=1;i<=n;i++) if(b[i]>=y) c++;cout<<y<<' '<<c<<endl;for(i=1;i<=c;i++)cout<<a[i]<<' '<<b[i]<<endl;
}

#6整数奇偶排序
不知道这道题为什么变得友善了,这道题先分出奇数偶数,再用sort函数分别排序就好。

#include<bits/stdc++.h>
using namespace std;
int cmp(int a,int b){return a>b;
}
int main(){int a[9000],k=0,m=0,b[9000],c[9000];for(int i=1;i<=10;i++) cin>>a[i];for(int i=1;i<=10;i++){if(a[i]%2!=0) b[++k]=a[i];else c[++m]=a[i];}sort(b+1,b+k+1,cmp);sort(c+1,c+m+1);for(int i=1;i<=k;i++) cout<<b[i]<<' ';for(int i=1;i<=m;i++) cout<<c[i]<<' ';
}

#7合影效果
这道大水题不配拥有解释…(和上一道题有些相似,同样是分批解决)
直接上代码解释一切。

#include<bits/stdc++.h>
using namespace std;
int n,x,y;
int cmp(double a,double b) {return a>b;
}
int main(){cin>>n;double a[100],b[100];for(int i=0;i<n;i++){string h;double m;cin>>h>>m;if(h=="male")a[x++]=m;else b[y++]=m;}sort(a,a+x);sort(b,b+y,cmp);for(int i=0;i<x;i++) printf("%.2lf ",a[i]);for(int i=0;i<y;i++) printf("%.2lf ",b[i]);
}

#8病人排队
三种排序方式,将登记的病人按照以下原则排出看病的先后顺序

  1. 老年人(年龄 >= 60岁)比非老年人优先看病。
  2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
  3. 非老年人按登记的先后顺序看病。
#include<iostream>
#include<algorithm>
using namespace std;
struct br{int sui;
string id;
int bh;
};bool bz(br a,br b){if(a.sui>=60&&b.sui<60){return 1;
}
if(a.sui<60&&b.sui>=60){return 0;
}
if(a.sui>=60&&b.sui>=60){if(a.sui>b.sui){return 1;
}
if(a.sui==b.sui){if(a.bh<b.bh){return 1;
}else{return 0;
}
}
if(a.sui<b.sui){return 0;
}
}
if(a.sui<60&&b.sui<60){if(a.bh<b.bh){return 1;
}else{return 0;
}
}
}br a[101];int main(){int n;
cin>>n;
for(int i=1;i<=n;i++){cin>>a[i].id>>a[i].sui;
a[i].bh=i;
}
sort(a+1,a+n+1,bz);
for(int i=1;i<=n;i++) cout<<a[i].id<<endl;
}

#9明明的随机数
正常人想疯了比我一个蒟蒻还慢,这里用到unique函数,真·好·用!
可以到别的博客那里去了解一下unique的用法,这里直接上,自行理解这个去重函数的方便性。

#include<bits/stdc++.h>
using namespace std;
int main(){int n=0,a[101],m=0;cin>>n;for(int i=0;i<n;i++)cin>>a[i];sort(a,a+n);m=unique(a,a+n)-a;cout<<m<<endl;for(int i=0;i<m;i++) cout<<a[i]<<' ';
}

#10单词排序
这玩意儿输入注意点就没多大问题了。

#include<bits/stdc++.h>
using namespace std;
int main()
{string word[101],s;
int n=0;
while(cin>>s){n++;
word[n]=s;
}for(int i=1;i<=n-1;i++)
{for(int j=1;j<=n-i;j++)
{if(word[j]>word[j+1])
{string x=word[j];
word[j]=word[j+1];
word[j+1]=x;
}
}}
for(int i=1;i<=n;i++)
{if(word[i]==word[i+1])
continue;
cout<<word[i]<<endl;
}
}

总结:排序问题涉及到struct结构体,sort的自定义用法等等,最难的就是自定义函数!其实不是特别难

NOI 1.10 编程基础之简单排序 C++相关推荐

  1. NOI / 1.10编程基础之简单排序 02:奇数单增序列

    02:奇数单增序列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出. 输入 共 ...

  2. 1.10 编程基础之简单排序 06 整数奇偶排序 python

    http://noi.openjudge.cn/ch0110/06/ """ 1.10 编程基础之简单排序 06 整数奇偶排序 http://noi.openjudge. ...

  3. 1.10 编程基础之简单排序 04 奖学金 7分 python

    http://noi.openjudge.cn/ch0110/04/ """ 1.10 编程基础之简单排序 04 奖学金 7分 http://noi.openjudge. ...

  4. 1.10 编程基础之简单排序 03 成绩排序 3分 python

    http://noi.openjudge.cn/ch0110/03/ """ 1.10 编程基础之简单排序 03 成绩排序 3分 http://noi.openjudge ...

  5. 1.10 编程基础之简单排序_10 单词排序

    http://noi.openjudge.cn/ch0110/10/ /* 1.10 编程基础之简单排序_10 单词排序 http://noi.openjudge.cn/ch0110/10/总时间限制 ...

  6. 1.10 编程基础之简单排序 10 单词排序 python

    http://noi.openjudge.cn/ch0110/10/ """ 1.10 编程基础之简单排序 10 单词排序 http://noi.openjudge.cn ...

  7. OpenJudge NOI 1.5编程基础之循环控制(31-40题)C++ 解题思路

    续上一篇文章.OpenJudge NOI 1.5 编程基础之循环控制(21-30题)C++ 解题思路_Leleprogrammer的博客-CSDN博客续上一篇文章OpenJudge NOI 1.5编程 ...

  8. NOI 1.13编程基础之综合应用 45十进制到八进制

    http://noi.openjudge.cn/ch0113/45/ /* NOI 1.13编程基础之综合应用 45十进制到八进制 http://noi.openjudge.cn/ch0113/45/ ...

  9. 45:十进制到八进制(OpenJudge在线题库 :NOI / 1.13编程基础之综合应用)

    /* 45:十进制到八进制 NOI / 1.13编程基础之综合应用 OpenJudge在线题库  http://noi.openjudge.cn/ch0113/45/ */ #include < ...

最新文章

  1. 泰晤士最新排名出炉,这两所大学跌惨了
  2. /etc/fstab文件损坏怎么办
  3. Beta 冲刺 (3/7)
  4. cocos2d-x游戏开发(三)无限滚动地图
  5. EntityFramework和EntityFramework.Extended使用说明——性能,语法和产生的sql
  6. 工程项目管理需要注意哪些问题
  7. 前端学习(2602):什么是跨域请求和跨域请求数据数据的表现
  8. 混淆矩阵-python
  9. 【题集】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)
  10. python搭建网页_使用python快速搭建本地网站
  11. 计算机应用入学考试,本科计算机应用入学考试模拟试题.doc
  12. docx文件怎样打开 - 转
  13. paip..net 程序多语言切换开发的流程总结
  14. wineskin下plsql解决中文乱码问题
  15. Opencv打开basler相机——实现显示视频、保存图片、记录视频(Windows下)
  16. cmake和make的简单理解
  17. 如何修改host文件权限
  18. 3D游戏模型教程系列:3D max安装
  19. 利用闲置的树莓派4B搭建一个NAS(二)
  20. JetBrains PyCharm JetBrains PyCharm 2018.1.3 x64永久破解

热门文章

  1. 读书笔记 | 国富论 (卷三-卷五)
  2. c++实现 齐次坐标 4*4矩阵 四元数 坐标变换
  3. IO与CPU跟线程的关系
  4. 《鬼武者3》历史背景
  5. 视频教程-完整的Python和SAS数据分析-大数据
  6. 1999-2018年地级市年末实有耕地面积、人均耕地面积、行政区域土地面积、人口密度等
  7. idea 2020 2021 maven不能下载jar包解决办法
  8. Centos 7 一键安装Redash (Centos7 + Docker)
  9. OpenGL ES_手把手教你打造VR全景播放器
  10. 【推荐】推荐系统 Embedding 技术实践总结