题目描述
给定学生的成绩单,成绩单中包含每个学生的学号和分数,请将成绩单按成绩从低到高的顺序重新排序。
如果学生的成绩相同,则按照学号从小到大的顺序进行排序。
输入格式
第一行包含整数 NN,表示学生数量。
接下来 NN 行,每行包含两个整数 pp 和 qq,表示一个学生的学号和成绩。
学生的学号各不相同。
输出格式
输出重新排序后的成绩单。
每行输出一个学生的学号和成绩,用单个空格隔开。
数据范围
1≤N≤1001≤N≤100,
1≤p≤1001≤p≤100,
0≤q≤1000≤q≤100
输入样例:
3
1 90
2 87
3 92
输出样例:
2 87
1 90
3 92
思路
就是简单的结构体排序,用了sort函数。有一点较难的地方就是如果成绩相同,要按照学号从小到大进行排序。这里写一个简单的cmp就可以了。
代码:
#include <iostream>
#include <algorithm>
using namespace std;
struct student {
int no;
int score;
};
bool cmp(student x, student y) {//这里传参的类型是结构体类型,咋老顺手就写成int了,真服了
if (x.score == y.score) {
return x.no < y.no;
}
else {
return x.score < y.score;
}
}
int main() {
int n,i;
student s[110];
cin >> n;
for (i = 0;i < n;i++) {
cin >> s[i].no >> s[i].score;
}
sort(s, s + n, cmp);
for (i = 0;i < n;i++) {
cout << s[i].no << " " << s[i].score << endl;
}
return 0;
}