PAT(Advanced)甲级1028 List Sorting (STL)C++实现
题目链接
题目大意
根据不同列对记录进行排序,根据名字或分数排序时,名字或分数相等的记录根据ID排序。
AC代码
#include<bits/stdc++.h>
using namespace std;
const int MAX_SIZE = 10;
struct Record {
int ID;
char name[MAX_SIZE];
int grade;
};
bool compareID(const Record& record1, const Record& record2) {
return record1.ID < record2.ID;
}
bool compareGrade(const Record& record1, const Record& record2) {
if (record1.grade == record2.grade) {
return compareID(record1, record2);
} else {
return record1.grade < record2.grade;
}
}
bool compareName(const Record& record1, const Record& record2) {
if (strcmp(record1.name, record2.name) < 0) {
return true;
} else if (strcmp(record1.name, record2.name) > 0) {
return false;
}
else {
return compareID(record1, record2);
}
}
int main(int argc, char const *argv[])
{
int N, C;
vector<Record> v;
while (~scanf("%d%d", &N, &C)) {
v.clear();
v.resize(N);
for (int i = 0; i < N ; i++) {
scanf("%d%s%d", &v[i].ID, v[i].name, &v[i].grade);
}
if (C == 1) {
sort(v.begin(), v.end(), compareID);
} else if (C == 2) {
sort(v.begin(), v.end(), compareName);
} else {
sort(v.begin(), v.end(), compareGrade);
}
for (int i = 0; i < v.size(); i++) {
printf("%06d %s %d\n", v[i].ID, v[i].name, v[i].grade);
}
}
return 0;
}
算法思路
利用标准库函数sort(), 编写三个比较函数,并将函数指针作为第三个参数传给sort函数即可。
样例输入1
3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
样例输出1
000001 Zoe 60
000007 James 85
000010 Amy 90
样例输入2
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
样例输出2
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
样例输入3
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
样例输出3
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90
鸣谢
感谢PAT提供的题目及测评平台
最后
本题只需要简单地调用C++STL函数即可完成!
由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!