Problem G: 名单排序

Problem G: 名单排序

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MiB

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