成绩排序---题解

其实这就是一道简单的结构体应用题
记录下来就是为了以后复习用,sort函数中的比较函数的设置;

在这里插入图片描述

题目链接:成绩排序

1289: 成绩排序
时间限制: 1 Sec 内存限制: 32 MB
提交: 93 解决: 26 外部导入
题目描述
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排>序,并输出N个学生排序后的信息。

输入
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。

输出
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩

样例输入 Copy
3
zhao 19 90
qian 20 90
sun 19 100


样例输出 Copy
qian 20 90
zhao 19 90
sun 19 100

思路
sort函数中的比较函数的设置和结构体的运用

#include <bits/stdc++.h>
using namespace std;
struct stu{
    char name[105];
    int score,age;
};
bool cmp(struct stu a, struct stu b)
{
    if (a.score!=b.score)
        return a.score<b.score;
    else if (strcmp(a.name,b.name)!=0)
        return strcmp(a.name,b.name)<0;
    else
        return a.age<b.age;
}
int main()
{
    int n;
    while (cin>>n)
    {
        struct stu students[n];
        for (int i = 0; i < n; ++i) {
            cin>>students[i].name>>students[i].age>>students[i].score;
        }
        sort(students,students+n,cmp);
        for (int j = 0; j < n; ++j) {
            cout<<students[j].name<<" "<<students[j].age<<" "<<students[j].score<<endl;
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章