#include<iostream> #include<algorithm> using namespace std; //复习结构体 struct Student { char name[100]; int score; int order; }; const int maxN = 10001; //一开始这个没开够:牛客网只过了6/10 //提示: 段错误 //您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起 struct Student list[maxN]; //升序 bool Compare1(Student x, Student y) { if (x.score == y.score) { return x.order < y.order; } else { return x.score < y.score; } } //降序 bool Compare0(Student x, Student y) { if (x.score == y.score) { return x.order < y.order; } else { return x.score > y.score; } } //Compare函数定义规则: //如果x,y是排序规则需要的顺序,则返回1 int main() { int n; int type; while (scanf("%d", &n) != EOF) { scanf("%d", &type); for (int i = 0; i < n; i++) { scanf("%s %d", &list[i].name, &list[i].score); list[i].order = i; } if (type) { sort(list, list + n, Compare1); //可以直接用stable_sort这样得到的就是相同值保持输入顺序不变的排序结果 } else { sort(list, list + n, Compare0); } for (int i = 0; i < n; i++) { printf("%s %d\n", list[i].name, list[i].score); } } //读入字符串的方法! //https://blog.csdn.net/weixin_44123362/article/details/96730486 }
注意读入字符串的方法
https://blog.csdn.net/weixin_44123362/article/details/96730486
还是String+cin cout更方便呀!