题解 | #成绩排序#
成绩排序
https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1
#include <iostream> #include <algorithm> #include <string> using namespace std; struct Student{ char name[50]; int score; //用一个序号来判断学生的顺序在比较器中使用 int seq; //序号 }; bool increase(Student s1, Student s2){ //成绩大的往后,其他不变 if(s1.score < s2.score){ return true; }else if(s1.score == s2.score && s1.seq < s2.seq){ return true; } return false; } bool decrease(Student s1, Student s2){ //成绩大的往前,其他不变 if(s1.score > s2.score){ return true; }else if(s1.score == s2.score && s1.seq < s2.seq){ return true; } return false; } int main() { int n;//人数 int way;//排序的方式 0为降序 1为升序 Student stu[10000]; while(scanf("%d%d", &n, &way) != EOF){ for(int i = 0; i < n; i++){ stu[i].seq = i; scanf("%s %d", stu[i].name, &stu[i].score); } if(1 == way){ sort(stu, stu + n, increase); }else{ sort(stu, stu + n, decrease); } for(int i = 0; i < n; i++){ printf("%s %d\n", stu[i].name, stu[i].score); } } }