EXCEL排序
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11903 Accepted Submission(s): 4736
行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node{
char num[8];
char name[10];
int cj;
}Node;
Node s[110000];
int cmpnum(const void *a,const void *b)
{
Node *c = (Node *)a;
Node *d = (Node *)b;
return strcmp(c->num , d->num);
}
int cmpname(const void *a,const void *b)
{
Node *c = (Node *)a;
Node *d = (Node *)b;
if(strcmp(c->name,d->name)!=0)
return strcmp(c->name , d->name) ;
else
return strcmp(c->num , d->num);
}
int cmpcj(const void *a,const void *b)
{
Node *c = (Node *)a;
Node *d = (Node *)b;
if(c->cj!=d->cj)
return c->cj - d->cj;
else
return strcmp(c->num , d->num);
}
int main()
{
int m,n,k=1;
while(scanf("%d %d",&n,&m),n)
{
int i,j;
for(i=0;i<n;i++)
scanf("%s%s%d",s[i].num,s[i].name,&s[i].cj);
if(m==1)
qsort(s,n,sizeof(s[0]),cmpnum);
if(m==2)
qsort(s,n,sizeof(s[0]),cmpname);
if(m==3)
qsort(s,n,sizeof(s[0]),cmpcj);
printf("Case %d:
",k++);
for(i=0;i<n;i++)
printf("%s %s %d
",s[i].num,s[i].name,s[i].cj);
}
return 0;
}
qsort--结构体