成績排序---題解

其實這就是一道簡單的結構體應用題
記錄下來就是爲了以後複習用,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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章