大意:就是按照题目的规则去排序,pat就是唬人,其实根本没用到链表排序。甚至这题复杂的逻辑性都没有,直接按照他说的逻辑去排序一下就可以了。这里我就不去多讲了,码这题的代码不难,而且也没什么逻辑上的考虑,唯一的地方就是注意输出叭
注意要点:最后输出的时候,注意一下保存6为数字,就是考察printf()的格式化输出:
#pragma GCC optimize(2)
#include <iostream>
#include <algorithm>
using namespace std;
//id name grade
const int N=100010;
struct Student{
int id,grade;
string name;
}stu[N];
bool cmp1(Student a,Student b){
return a.id<b.id;
}
bool cmp2(Student a,Student b){
if(a.name!=b.name) return a.name<=b.name;
else return a.id<b.id;
}
bool cmp3(Student a,Student b){
if(a.grade!=b.grade) return a.grade<b.grade;
else return a.id<b.id;
}
int main(){
int n,c;//c:用来排序的列的编号
cin>>n>>c;
for(int i=0;i<n;i++){
cin>>stu[i].id>>stu[i].name>>stu[i].grade;
}
if(c==1) sort(stu,stu+n,cmp1);
else if(c==2) sort(stu,stu+n,cmp2);
else sort(stu,stu+n,cmp3);
for(int i=0;i<n;i++){
//printf("%06d %s %d",stu[i].id,stu[i].name,stu[i].grade);
printf("%06d ",stu[i].id);//还是要去格式化一下
cout<<stu[i].name<<' '<<stu[i].grade<<endl;
}
return 0;
}