返回目录
题意
输入n个考生的id,姓名,分数,并输入参数C,按照C的不同输出排序结果
- C=1,id从小到大
- C=2,name按照字典序排序,如果同名,按照id从小到大排
- C=3,score从小到大排,如果分数相同,按照id从小到大排
样例(可复制)
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
样例输出
000001 Zoe 60
000007 James 85
000010 Amy 90
注意点
- 本题也是典型的排序问题,相比较其他排序问题更为简单
- 分别写3个cmp函数比较即可
#include <bits/stdc++.h>
using namespace std;
struct student{
int id,score;
char name[10];
}stu[100010];
bool cmp1(student a,student b){
return a.id<b.id;
}
bool cmp2(student a,student b){
int s=strcmp(a.name,b.name);
if(s!=0)return s<0;
return a.id<b.id;
}
bool cmp3(student a,student b){
if(a.score!=b.score)return a.score<b.score;
return a.id<b.id;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)scanf("%d %s %d",&stu[i].id,stu[i].name,&stu[i].score);
if(m==1)sort(stu,stu+n,cmp1);
else if(m==2)sort(stu,stu+n,cmp2);
else sort(stu,stu+n,cmp3);
for(int i=0;i<n;i++)printf("%06d %s %d\n",stu[i].id,stu[i].name,stu[i].score);
return 0;
}