HDUoj 1862 EXCEL排序
Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。
行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间 0,100
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
3 1 000007 James 85 000010 Amy 90 000001 Zoe 60 4 2 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 98 4 3 000007 James 85 000010 Amy 90 000001 Zoe 60 000002 James 90 0 0
Case 1: 000001 Zoe 60 000007 James 85 000010 Amy 90 Case 2: 000010 Amy 90 000002 James 98 000007 James 85 000001 Zoe 60 Case 3: 000001 Zoe 60 000007 James 85 000002 James 90 000010 Amy 90
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct CT
{
char id[10];
char name[10];
int s;
}p[110000];
bool cmp1(CT x,CT y)
{
if( strcmp(x.id , y.id) < 0 )
return true;
else
return false;
}
bool cmp2(CT x,CT y)
{
if(strcmp(x.name,y.name) < 0 )
return true;
else if(strcmp(x.name , y.name) == 0)
{
if( strcmp(x.id , y.id) < 0 )
return true;
}
return false;
}
int cmp3(CT x, CT y)
{
if(x.s<y.s) return 1;
else if(x.s==y.s)
{
if( strcmp(x.id , y.id) < 0 )
return 1;
}
return false;
}
int main()
{
int m,n,i;
int k=0;
while(~scanf("%d%d",&m,&n),m){
for(i=0;i<m;i++){
scanf("%s%s%d",p[i].id,p[i].name,&p[i].s);
}
switch(n)
{
case 1:
sort(p,p+m,cmp1);
break;
case 2:
sort(p,p+m,cmp2);
break;
case 3:
sort(p,p+m,cmp3);
break;
}
printf("Case %d:\n",++k);
for(i=0;i<m;i++) {
printf("%s %s %d\n",p[i].id,p[i].name,p[i].s);
}
}
return 0;
}