1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h>//包含qsort函数的头文件 4 struct node 5 { 6 char name[20],time[6]; 7 int t;//时间 8 int rank;//排名 9 }p[11]; 10 int cmp(const void *a,const void *b) 11 { 12 struct node *c=(struct node *)a; 13 struct node *d=(struct node *)b; 14 if(c->t!=d->t) 15 {return c->t-d->t;}//时间比较 16 else 17 {return strcmp(c->name,d->name);}//名字字典排序 18 } 19 int main() 20 { 21 int n,i,j,count,ranklist,flag,m; 22 count=0; 23 m=0; 24 while(scanf("%d",&n)!=EOF) 25 { 26 if(n==0) 27 {break;} 28 if(m!=0) 29 {printf("\n");} 30 m++; 31 for(i=0;i<n;i++) 32 { 33 getchar(); 34 scanf("%s%s",p[i].name,p[i].time); 35 p[i].t=((p[i].time[0]-'0')*10+(p[i].time[1]-'0'))*60+(p[i].time[3]-'0')*10+(p[i].time[4]-'0'); 36 } 37 qsort(p,n,sizeof(p[0]),cmp); 38 39 printf("Case #%d\n",++count); 40 ranklist=1; 41 for(i=0;i<n;i++)//时间相同的运动员计数 42 { 43 flag=i;// 标记时间相同的运动员的起始下标; 44 while(p[i].t==p[i+1].t) 45 {i++;} 46 for(j=flag;j<=i;j++) 47 p[j].rank=ranklist;//给排名赋值0 48 ranklist+=j-flag; 49 } 50 for(i=0;i<n;i++) 51 { 52 printf("%s %d\n",p[i].name,p[i].rank); 53 } 54 } 55 return 0; 56 } 57