#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; struct student{ char xue[7]; char name[9]; int score; }stu[100001]; bool cmp1(student a,student b){ return strcmp(a.xue,b.xue)<0; } bool cmp2(student a,student b){ if(strcmp(a.name,b.name) !=0)//名字不相等 return strcmp(a.name,b.name)<0; else return cmp1(a,b); } bool cmp3(student a,student b){ if(a.score!=b.score) return a.score<b.score; else return cmp1(a,b); } int main(){ int i,N,k,cnt=1; while(scanf("%d%d",&N,&k)!=EOF){ //if(N==0) return 0; for(i=0;i<N;i++) scanf("%s%s%d",stu[i].xue,stu[i].name,&stu[i].score); switch(k){ case 1:sort(stu,stu+N,cmp1); break; case 2:sort(stu,stu+N,cmp2); break; case 3:sort(stu,stu+N,cmp3); break; } printf("Case %d:\n",cnt++); for(i=0;i<N;i++) printf("%s %s %d\n",stu[i].xue,stu[i].name,stu[i].score); } return 0; } /* 4 2 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 98 */ #include<string.h> #include<iostream> #include<algorithm> using namespace std; struct E{ //定义学生结构体 char id[10]; //学号 char name[10]; //姓名 int score; //成绩 }buf[100005]; bool cmp1(E a,E b){ //按学号升序 return strcmp(a.id,b.id)<0; } bool cmp2(E a,E b){ //按姓名升序,姓名相同按学号升序 int tmp=strcmp(a.name,b.name); if(tmp!=0) return tmp<0; else return cmp1(a,b); //按学号升序,直接调用前面函数 } bool cmp3(E a,E b){ //按成绩升序,成绩相同按学号升序 if(a.score!=b.score) return a.score<b.score; else return cmp1(a,b); } int main(){ int N,C,k=1; while(cin>>N>>C){ if(N==0) return 0; //结束条件 for(int i=0;i<N;++i) cin>>buf[i].id>>buf[i].name>>buf[i].score; switch(C){ //根据输入选择排序类型 case 1:sort(buf,buf+N,cmp1);break; case 2:sort(buf,buf+N,cmp2);break; case 3:sort(buf,buf+N,cmp3);break; } cout<<"Case "<<k++<<":"<<endl; for(int i=0;i<N;++i) cout<<buf[i].id<<" "<<buf[i].name<<" "<<buf[i].score<<endl; } return 0; }
EXCEL排序
最新推荐文章于 2021-02-09 21:29:49 发布