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<stdlib.h> #include<string.h> struct c { char num[10]; char name[20]; int chengji; }a[100005]; int comp1(const void*a,const void*b)//学号递增排序 { struct c *p1=(struct c*)a; struct c *p2=(struct c*)b; return strcmp(p1->num,p2->num); } int comp2(const void*a,const void*b)//姓名递增排序 { struct c *p1=(struct c*)a; struct c *p2=(struct c*)b; if(strcmp(p1->name,p2->name)) return strcmp(p1->name,p2->name); else return strcmp(p1->num,p2->num); } int comp3(const void*a,const void*b)//成绩递增 { struct c *p1=(struct c*)a; struct c *p2=(struct c*)b; if(p1->chengji!=p2->chengji) return p1->chengji-p2->chengji; else return strcmp(p1->num,p2->num); } int main() { int n,c,i,k=1; while(scanf("%d %d",&n,&c),n) { for(i=0;i<n;i++) { scanf("%s %s %d",a[i].num,a[i].name,&a[i].chengji); } switch(c) { case 1:qsort(a,n,sizeof(struct c),comp1);break; case 2:qsort(a,n,sizeof(struct c),comp2);break; case 3:qsort(a,n,sizeof(struct c),comp3);break; } printf("Case %d:\n",k); k++; for(i=0;i<n;i++) { printf("%s %s %d\n",a[i].num,a[i].name,a[i].chengji); } } return 0; }
分析:
总算放假了!~又可以A题了!
感觉这道题很经典啊,虽然很水,但是感觉是结构体排序很全的一道了.
第一次看题的时候少看了一个条件WA 6次 - -!
当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。