成绩排序(华中科技大学考研机试题)(DAY 87)

1:题目

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

输入格式
第一行有一个整数 N。

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

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

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

姓名 年龄 成绩

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

数据范围
1≤N≤1000
输入样例:
3
abc 20 99
bcd 19 97
bed 20 97
输出样例:
bcd 19 97
bed 20 97
abc 20 99
难度:简单
时/空限制:1s / 64MB
总通过数:904
总尝试数:1426
来源:华中科技大学考研机试题
算法标签

2:代码实现

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1010;

int n;
struct Student
{
    string name;
    int age, score;

    bool operator< (const Student& t) const
    {
        if (score != t.score) return score < t.score;
        if (name != t.name) return name < t.name;
        return age < t.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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张学恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值