天天看点

成绩排序(暑假每日一题 36)

有 个学生的数据,将学生数据按成绩从低到高排序,如果成绩相同则按姓名字符的字典序排序,如果姓名的字典序也相同则按照学生的年龄从小到大排序,并输出

输入格式

第一行有一个整数 。

接下来的 行包括 个学生的数据。每个学生的数据包括姓名(长度不超过 的字符串)、年龄(小于等于 的正数)、成绩(小于等于

输出格式

将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。

然后输出学生信息,按照如下格式:

姓名 年龄 成绩      

学生姓名的字母序区分字母的大小写,如 要比 的字母序靠前(因为 的 码比 的

数据范围

3
abc 20 99
bcd 19 97
bed 20 97      
bcd 19 97
bed 20 97
abc 20 99      
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1010;

int n;
struct Node{
    
    string name;
    int age, score;
    bool operator < (const Node &W) const{
        
        if(score != W.score) return score < W.score;
        if(name != W.name) return name < W.name;
        return age < W.age;
    }
}q[N];

int main(){
    
    cin >> n;
    
    for(int i = 0; i < n; i++)
        cin >> q[i].name >> q[i].age >> q[i].score;
        
    sort(q, q + n);
    
    for(int i = 0; i < n; i++)
        cout << q[i].name << ' ' << q[i].age << ' ' << q[i].score << endl;
        
    return 0;
}