【题目来源】
https://www.luogu.com.cn/problem/B2159

【题目描述】
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。

【输入格式】
第一行为 n(0<n<20),表示班里的学生数目。
接下来的 n 行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过 20,成绩为一个不大于 100 的非负整数。

【输出格式】
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。

【输入样例】
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28​​​​​​​

【输出样例】
Joey 92
Hanmeimei 90 
Kitty 80
Tim 28

【数据范围】
0<n<20​​​​​​​

【算法分析】
● 按结构体某一字段对结构体数组进行排序:https://blog.csdn.net/hnjzsyjyj/article/details/120184972

【算法代码】

#include <bits/stdc++.h>
using namespace std;

const int maxn=25;
struct Student {
    string name;
    int score;
} stu[maxn];

bool down(Student u,Student v) {
    if(u.score==v.score) return u.name<v.name;
    return u.score>v.score;
}

int main() {
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) {
        cin>>stu[i].name>>stu[i].score;
    }

    sort(stu+1,stu+1+n,down);
    for(int i=1; i<=n; i++) {
        cout<<stu[i].name<<" "<<stu[i].score<<endl;
    }

    return 0;
}


/*
in:
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28​​​​​​​

out:
Joey 92
Hanmeimei 90 
Kitty 80
Tim 28
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/120184972
https://blog.csdn.net/hnjzsyjyj/article/details/156479934

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐