noi寒假刷题之旅_1.10编程基础之简单排序(10题)
»1.10编程基础之简单排序(10题)
01:谁考了第k名
#include<iostream> #include<string> #include<algorithm> #define MAX 200 using namespace std; struct S { string id; double score; }stu[MAX]; bool cmp(S a,S b) { if(a.score<b.score)return false; return true; } int main() { int n,k; cin>>n>>k; for(int i=0;i<n;++i) { cin>>stu[i].id>>stu[i].score; } sort(stu,stu+n,cmp); cout<<stu[k-1].id<<" "<<stu[k-1].score; }
02:奇数单增序列
#include<iostream> #include<string> #include<algorithm> #define MAX 200 using namespace std; int stu[MAX]; int main() { int n,k,j=0; cin>>n; for(int i=0;i<n;++i) { cin>>k; if(k%2)stu[j++]=k; } sort(stu,stu+j); for(int i=0;i<j-1;++i) { cout<<stu[i]<<","; } cout<<stu[j-1]; }
03:成绩排序
#include<iostream> #include<string> #include<algorithm> #define MAX 200 using namespace std; struct S { string name; int score; }stu[MAX]; bool cmp(S a,S b) { if(a.score<b.score) { return false; } else if(a.score==b.score) { return a.name<b.name; } return true; } int main() { int n,k,i=0; cin>>n; for(i=0;i<n;++i)cin>>stu[i].name>>stu[i].score; sort(stu,stu+n,cmp); for(i=0;i<n;++i)cout<<stu[i].name<<" "<<stu[i].score<<endl; }
04:奖学金
#include<iostream> #include<string> #include<algorithm> #define MAX 400 using namespace std; struct S { int id; int china; int math; int english; int sum; }stu[MAX]; bool cmp(S a,S b) { if(a.sum==b.sum) { if(a.china==b.china) { return a.id<b.id; } else { return a.china>b.china; } } else { return a.sum>b.sum; } return true; } int main() { int n,k,i=0; cin>>n; for(i=0;i<n;++i) { stu[i].id=i+1; cin>>stu[i].china>>stu[i].math>>stu[i].english; stu[i].sum=stu[i].china+stu[i].math+stu[i].english; } sort(stu,stu+n,cmp); for(i=0;i<5;++i)cout<<stu[i].id<<" "<<stu[i].sum<<endl; }
05:分数线划定
#include<iostream> #include<string> #include<algorithm> #define MAX 6000 using namespace std; struct S { int k; int s; }stu[MAX]; bool cmp(S a,S b) { if(a.s==b.s) { return a.k<b.k; } else { return a.s>b.s; } } int main() { int n,m,k,i=0; cin>>n>>m; for(i=0;i<n;++i) { cin>>stu[i].k>>stu[i].s; } sort(stu,stu+n,cmp); m=(int)m*1.5; int mark=stu[m-1].s; int j=0; for(i=0;i<n;++i) { if(stu[i].s>=mark) ++j; } cout<<mark<<" "<<j<<endl; for(i=0;i<j;++i) { cout<<stu[i].k<<" "<<stu[i].s<<endl; } }
06:整数奇偶排序
#include<iostream> #include<string> #include<algorithm> #define MAX 6000 using namespace std; bool od(int a,int b) { return a>b; } bool er(int a,int b) { return a<b; } int odd[10]; int err[10]; int main() { int n,m,k,o=0,e=0,i=0; for(i=0;i<10;++i) { cin>>k; if(k%2) odd[o++]=k; else err[e++]=k; } if(o!=0) sort(odd,odd+o,od); if(e!=0) sort(err,err+e,er); for(i=0;i<o;++i)cout<<odd[i]<<" "; for(i=0;i<e-1;++i)cout<<err[i]<<" "; if(e!=0)cout<<err[i]; }
07:合影效果
#include<iostream> #include<string> #include<algorithm> #define MAX 6000 using namespace std; bool od(double a,double b) { return a<b; } bool er(double a,double b) { return a>b; } double odd[50]; double err[50]; int main() { int n,m,k,o=0,e=0,i=0; double t; string S; cin>>n; for(i=0;i<n;++i) { cin>>S>>t; if(S=="male")odd[o++]=t; if(S=="female")err[e++]=t; } sort(odd,odd+o,od); sort(err,err+e,er); for(i=0;i<o;++i)printf("%.2f ",odd[i]); for(i=0;i<e-1;++i)printf("%.2f ",err[i]); printf("%.2f",err[i]); }
08:病人排队
#include<iostream> #include<string> #include<algorithm> #define MAX 6000 using namespace std; struct S { int xl; string id; int age; }peo[MAX]; bool cmp(S a,S b) { if(a.age>=60&&b.age>=60) { if(a.age==b.age) { return a.xl<b.xl; } else { return a.age>b.age; } } else if(a.age<60&&b.age<60) { return a.xl<b.xl; } else { return a.age>b.age; } } int main() { int n,m,k,o=0,e=0,i=0; double t; string S; cin>>n; for(i=0;i<n;++i) { peo[i].xl=i; cin>>peo[i].id>>peo[i].age; } sort(peo,peo+n,cmp); for(i=0;i<n;++i)cout<<peo[i].id<<endl; }
09:明明的随机数
#include<iostream> #include<string> #include<algorithm> #define MAX 6000 using namespace std; int peo[MAX]; int n; bool cmp(int &a,int &b) { return a<b; } int main() { int m,k,o=0,e=0,i=0; cin>>n; k=n; for(i=0;i<n;++i) { cin>>peo[i]; for(int j=i-1;j>=0;--j) { if(peo[j]==peo[i]) { i--; n--; break; } } } sort(peo,peo+n,cmp); cout<<n<<endl; for(i=0;i<n-1;++i)cout<<peo[i]<<" "; cout<<peo[i]; }
10:单词排序
#include<iostream> #include<string> #include<algorithm> #define MAX 6000 using namespace std; string peo[MAX]; int n; int main() { int i=0,j=0; while(cin>>peo[j]) { for(int k=j-1;k>=0;--k) { if(peo[j]==peo[k]) { j--; break; } } j++; } sort(peo,peo+j); for(i=0;i<j-1;++i)cout<<peo[i]<<endl; cout<<peo[i]; }