Problem G: 名单排序
[Creator : ]
Description
在某次考试中,有 位同学参加,现已知每位同学的姓名和对应成绩。老师希望你帮忙将同学们的成绩从高到低排序,并输出排序后的名单。
请注意:
- 所有同学的姓名互不相同。
- 所有同学的成绩也互不相同。
- 如果成绩相同(虽然本题不会发生),应按姓名字典序排序(本题中无需处理此情况)。
struct stu {
string name; // 字符串:姓名
int score; // 整数:分数
};
对学生选择排序,如果第i个学生的成绩比第j个学生的成绩低,则交换第i个和第j个结构体。
直接将一位学生的所以信息作为整体进行交换。
cin >> student[i].name >> student[i].score; student[i] = student[j];
请同学们根据提示完全代码
#include <iostream>
#include <string>
using namespace std;
int n;
struct stu {
_____ // 字符串:姓名
_____ // 整数:分数
};
stu student[110];
int main() {
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> ______ >> ______; // 输入名字和分数
}
for(int i = 1; i <= n - 1; i++) //大循环:i 从 1 到 n-1
for(int j = i + 1; j <= n; j++) //小循环:j 从 i 的下一个到 n
if(______________) { // 第 i 个人的分数比第 j 个低
stu tmp;
___________ // 交换第 i 个学生和第 j 个学生的信息
___________
___________
}
for(int i = 1; i <= n; i++)
cout << ________ << " " << ________ << endl; // 输出名字和分数
return 0;
}
Input
输入的第一行包含一个整数 ,表示同学的数量。
接下来的 行中,每行包含一个由小写英文字母组成的字符串和一个整数,表示一位同学的姓名 和成绩 ,两个信息之间用一个空格隔开。
- ;
- 名字是仅由小写英文字母组成的非空字符串,长度不超过 ;
- ;
- 所有姓名互不相同,所有成绩互不相同。
Output
输出 行,每行包含一个同学的姓名和成绩,按成绩从高到低的顺序排列。格式与输入相同,姓名在前,成绩在后,中间用空格隔开。
Sample Input Copy
5
alice 88
bob 92
charlie 75
david 85
eve 95
Sample Output Copy
eve 95
bob 92
alice 88
david 85
charlie 75