EXCEL排序
- 题目描述:
-
Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
- 输入:
-
测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符 串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。
- 输出:
-
对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。
- 样例输入:
-
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
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cmath> 5 #include <cctype> 6 #include <cstring> 7 8 #include <vector> 9 #include <deque> 10 #include <list> 11 #include <map> 12 #include <set> 13 #include <stack> 14 #include <queue> 15 #include <algorithm> 16 #include <string> 17 18 19 20 using namespace std; 21 22 23 struct Stu{ 24 string name; 25 string id; 26 int sc; 27 }stu[100000+4]; 28 29 30 bool cmp1(Stu x,Stu y) 31 { 32 if(x.id<y.id) 33 return true; 34 return false; 35 } 36 37 38 bool cmp2(Stu x,Stu y) 39 { 40 if(x.name<y.name) 41 return true; 42 else if(x.name==y.name) 43 {if(x.id<y.id) 44 return true; 45 else 46 return false; 47 } 48 else 49 return false; 50 } 51 52 53 bool cmp3(Stu x,Stu y) 54 { 55 if(x.sc<y.sc) 56 return true; 57 else if(x.sc==y.sc) 58 { 59 if(x.id<y.id) 60 return true; 61 else 62 return false; 63 } 64 else 65 return false; 66 } 67 68 69 70 71 72 73 74 int main() 75 { 76 77 int n,c; 78 79 int i,j,k; 80 81 82 k=0; 83 84 85 86 while(scanf("%d%d",&n,&c)!=EOF) 87 { 88 if(n==0) 89 break; 90 91 k++; 92 93 for(i=0;i<n;i++) 94 { 95 96 char id[100],name[100]; 97 int sc; 98 99 100 scanf("%s %s %d",id,name,&sc); 101 getchar(); 102 103 stu[i].id=id; 104 stu[i].name=name; 105 stu[i].sc=sc; 106 } 107 108 109 if(c==1) 110 { 111 112 sort(stu,stu+n,cmp1); 113 114 } 115 else if(c==2) 116 { 117 sort(stu,stu+n,cmp2); 118 119 } 120 else if(c==3) 121 { 122 sort(stu,stu+n,cmp3); 123 124 } 125 126 printf("Case %d:\n",k); 127 128 for(i=0;i<n;i++) 129 { 130 char id[100],name[100]; 131 int sc; 132 133 strcpy(id,stu[i].id.c_str()); 134 135 strcpy(name,stu[i].name.c_str()); 136 137 sc=stu[i].sc; 138 139 printf("%s %s %d\n",id,name,sc); 140 } 141 142 } 143 144 145 return 0; 146 }