原题
1028 List Sorting - PAT (Advanced Level) Practice
题目大意
输入n个学生的id、姓名、分数,再输入C表示对C列进行排序。
id:从小到大排
姓名:姓名不同时从小到大排,相同时id从小到大排
分数:不同时从小到大排,相同时id从小到大排
解题思路
调用自带的sort函数,自定义比较函数
代码(c++)
cpp
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
struct stu {
string id, name;
int score;
}stus[N];
bool cmp1(const stu &a, const stu &b) { // 比较id
return a.id < b.id;
}
bool cmp2(const stu &a, const stu &b) { // 比较姓名
if (a.name != b.name) return a.name < b.name;
return a.id < b.id;
}
bool cmp3(const stu &a, const stu &b) { // 比较分数
if (a.score != b.score) return a.score < b.score;
return a.id < b.id;
}
int main() {
int n, cmp;
cin >> n >> cmp;
for (int i = 0; i < n; i++)
cin >> stus[i].id >> stus[i].name >> stus[i].score;
switch (cmp) {
case 1:
sort(stus, stus + n, cmp1);
break;
case 2:
sort(stus, stus + n, cmp2);
break;
case 3:
sort(stus, stus + n, cmp3);
break;
default:
return 0;
}
for (int i = 0; i < n; i++)
cout << stus[i].id << " " << stus[i].name << " " << stus[i].score << endl;
return 0;
}