#include <stdio.h> #include <stdlib.h> #include <string.h> struct student { char num[7]; char name[9]; int grade; }; int compareByNum(const void *a, const void *b); int compareByName(const void *a, const void *b); int compareByGrade(const void *a, const void *b); int main() { int i, n, k; struct student people[100001]; static int size = 1; while(scanf("%d %d", &n, &k) != EOF) { if(n == 0) break; for(i = 0; i < n; i ++) { scanf("%s %s %d", people[i].num, people[i].name, &people[i].grade); } switch(k) { case 1 : qsort(people, n, sizeof(people[0]), compareByNum); break; case 2 : qsort(people, n, sizeof(people[0]), compareByName); break; case 3 : qsort(people, n, sizeof(people[0]), compareByGrade); break; } printf("Case %d:\n", size ++); for(i = 0; i < n; i ++) { printf("%s %s %d\n", people[i].num, people[i].name, people[i].grade); } } return 0; } int compareByNum(const void *a, const void *b) { const struct student *p = a; const struct student *q = b; return strcmp(p->num, q->num); } int compareByName(const void *a, const void *b) { const struct student *p = a; const struct student *q = b; if(strcmp(p->name, q->name) > 0) { return 1; }else if(strcmp(p->name, q->name) == 0 && strcmp(p->num, q->num) > 0) { return 1; }else { return -1; } } int compareByGrade(const void *a, const void *b) { const struct student *p = a; const struct student *q = b; if(p->grade > q->grade) { return 1; }else if(p->grade == q->grade && strcmp(p->num, q->num) > 0) { return 1; }else { return -1; } } /************************************************************** Problem: 2200 User: admin Language: C Result: Accepted Time:120 ms Memory:4928 kb ****************************************************************/