题目大意;
给出N个考生的准考证号,姓名,分数,并输入参数,要求按照C的不同取值进行排序。
C=1,按准考证号从小到大排序
C=2,按姓名字典序从小到大排序,如果姓名相同,按准考证号从小到大排序。
C=3,按分数从小到大排序,如果分数相同,按准考证号从小到大排序。
思路:
1.定义结构体存储题目中要求的信息,准考证号,姓名,分数。
2.cmp函数,按题目要求定义三个。
3.根据输入对结构体数组进行排序。
AC代码:
//PAT_A 1028
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100010;
struct Student {
int id;
char name[10];
int score;
}stu[maxn];
bool cmp1(Student a, Student b) {
return a.id < b.id;
}
bool cmp2(Student a, Student b) {
int s = strcmp(a.name, b.name);
if (s != 0)return s < 0;
else return a.id < b.id;
}
bool cmp3(Student a, Student b) {
if (a.score != b.score)return a.score < b.score;
else return a.id < b.id;
}
int main() {
int n, c;
(void)scanf("%d%d", &n, &c);
for (int i = 0; i < n; i++) {
scanf("%d %s %d", &stu[i].id, stu[i].name, &stu[i].score);
}
if (c == 1)sort(stu, stu + n, cmp1);
else if (c == 2)sort(stu, stu + n, cmp2);
else if (c == 3)sort(stu, stu + n, cmp3);
for (int i = 0; i < n; i++) {
printf("%06d %s %d\n", stu[i].id, stu[i].name, stu[i].score);
}
return 0;
}