题目大意
根据输入的c,按照第c列,即id,name,grade进行升序排序。如果name或grade相同,则按照id递增。
分析
简单排序,给了三组条件。
偷个懒,直接写了三个cmp函数然后用switch+排序了。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
struct Stu{
int id,grade;
string name;
}stu[maxn];
int n,c;
bool cmp1(Stu a, Stu b){
return a.id<b.id;
}
bool cmp2(Stu a,Stu b){
if(a.name==b.name) return a.id<b.id;
return a.name<b.name;
}
bool cmp3(Stu a,Stu b){
if(a.grade==b.grade) return a.id<b.id;
return a.grade<b.grade;
}
void print(int n,int c){
switch(c){
case 1:
sort(stu,stu+n,cmp1);
break;
case 2:
sort(stu,stu+n,cmp2);
break;
case 3:
sort(stu,stu+n,cmp3);
break;
default:
break;
}
for(int i=0;i<n;++i){
printf("%06d ",stu[i].id);
cout << stu[i].name <<" "<< stu[i].grade<<"\n";
}
}
int main(){
cin >> n >> c;
for(int i=0;i<n;++i){
cin >> stu[i].id >> stu[i].name>>stu[i].grade;
}
print(n,c);
return 0;
}