-
题目大意:对每一列排序。c=1:按id增序;c=2:按名字增序;c=3:按成绩增序。如果名字或成绩相同,则按id增序排序。
-
思路1:写三个
cmp
函数,此时变量c为局部变量。-
知识点:
- struct
- sort
- 字符串数组的比较:
strcmp()
-
代码:
#include <iostream> #include <vector> #include <string.h> #include <algorithm> using namespace std; struct stu{ char name[9]; int id, grade; }; bool cmp1(stu a, stu b){ return a.id < b.id; } bool cmp2(stu a, stu b){ return strcmp(a.name, b.name) != 0 ? strcmp(a.name, b.name) < 0 : a.id < b.id; } bool cmp3(stu a, stu b){ return a.grade != b.grade ? a.grade < b.grade : a.id < b.id; } int main() { int n, c; scanf("%d %d", &n, &c); vector<stu> v(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(), cmp1); else if(c == 2) sort(v.begin(), v.end(), cmp2); else if(c == 3) sort(v.begin(), v.end(), cmp3); for(int i = 0; i < n; i++){ printf("%06d %s %d\n", v[i].id, v[i].name, v[i].grade); } return 0; }
-
-
思路2(参考柳诺的博客):写一个
cmp
函数,在cmp
函数里判断c的数值,此时变量c为全局变量。-
代码:
#include <iostream> #include <vector> #include <string.h> #include <algorithm> using namespace std; int c; struct stu{ char name[9]; int id, grade; }; bool cmp(stu a, stu b){ if(c == 1) return a.id < b.id; else if(c == 2) return strcmp(a.name, b.name) != 0 ? strcmp(a.name, b.name) < 0 : a.id < b.id; else if(c == 3) return a.grade != b.grade ? a.grade < b.grade : a.id < b.id; } int main() { int n; scanf("%d %d", &n, &c); vector<stu> v(n); for(int i = 0; i < n; i++) scanf("%d %s %d", &v[i].id, v[i].name, &v[i].grade); sort(v.begin(), v.end(), cmp); for(int i = 0; i < n; i++) printf("%06d %s %d\n", v[i].id, v[i].name, v[i].grade); return 0; }
-
-
总结:如果想在
cmp
进行条件判断,需要将需判断的变量设置为全局变量。
【PAT】1028 List Sorting (25 分)
最新推荐文章于 2022-01-29 17:36:00 发布