NOI 1.10 编程基础之简单排序 C++
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病人排队
三种排序方式,将登记的病人按照以下原则排出看病的先后顺序
- 老年人(年龄 >= 60岁)比非老年人优先看病。
- 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
- 非老年人按登记的先后顺序看病。
#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++相关推荐
- NOI / 1.10编程基础之简单排序 02:奇数单增序列
02:奇数单增序列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出. 输入 共 ...
- 1.10 编程基础之简单排序 06 整数奇偶排序 python
http://noi.openjudge.cn/ch0110/06/ """ 1.10 编程基础之简单排序 06 整数奇偶排序 http://noi.openjudge. ...
- 1.10 编程基础之简单排序 04 奖学金 7分 python
http://noi.openjudge.cn/ch0110/04/ """ 1.10 编程基础之简单排序 04 奖学金 7分 http://noi.openjudge. ...
- 1.10 编程基础之简单排序 03 成绩排序 3分 python
http://noi.openjudge.cn/ch0110/03/ """ 1.10 编程基础之简单排序 03 成绩排序 3分 http://noi.openjudge ...
- 1.10 编程基础之简单排序_10 单词排序
http://noi.openjudge.cn/ch0110/10/ /* 1.10 编程基础之简单排序_10 单词排序 http://noi.openjudge.cn/ch0110/10/总时间限制 ...
- 1.10 编程基础之简单排序 10 单词排序 python
http://noi.openjudge.cn/ch0110/10/ """ 1.10 编程基础之简单排序 10 单词排序 http://noi.openjudge.cn ...
- OpenJudge NOI 1.5编程基础之循环控制(31-40题)C++ 解题思路
续上一篇文章.OpenJudge NOI 1.5 编程基础之循环控制(21-30题)C++ 解题思路_Leleprogrammer的博客-CSDN博客续上一篇文章OpenJudge NOI 1.5编程 ...
- NOI 1.13编程基础之综合应用 45十进制到八进制
http://noi.openjudge.cn/ch0113/45/ /* NOI 1.13编程基础之综合应用 45十进制到八进制 http://noi.openjudge.cn/ch0113/45/ ...
- 45:十进制到八进制(OpenJudge在线题库 :NOI / 1.13编程基础之综合应用)
/* 45:十进制到八进制 NOI / 1.13编程基础之综合应用 OpenJudge在线题库 http://noi.openjudge.cn/ch0113/45/ */ #include < ...
最新文章
- 泰晤士最新排名出炉,这两所大学跌惨了
- /etc/fstab文件损坏怎么办
- Beta 冲刺 (3/7)
- cocos2d-x游戏开发(三)无限滚动地图
- EntityFramework和EntityFramework.Extended使用说明——性能,语法和产生的sql
- 工程项目管理需要注意哪些问题
- 前端学习(2602):什么是跨域请求和跨域请求数据数据的表现
- 混淆矩阵-python
- 【题集】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)
- python搭建网页_使用python快速搭建本地网站
- 计算机应用入学考试,本科计算机应用入学考试模拟试题.doc
- docx文件怎样打开 - 转
- paip..net 程序多语言切换开发的流程总结
- wineskin下plsql解决中文乱码问题
- Opencv打开basler相机——实现显示视频、保存图片、记录视频(Windows下)
- cmake和make的简单理解
- 如何修改host文件权限
- 3D游戏模型教程系列:3D max安装
- 利用闲置的树莓派4B搭建一个NAS(二)
- JetBrains PyCharm JetBrains PyCharm 2018.1.3 x64永久破解