1. 程式人生 > >水題 成績排序 (vector的練習)

水題 成績排序 (vector的練習)

題目描述:

有N個學生的資料,將學生資料按成績高低排序,如果成績相同則按姓名字元的字母序排序,如果姓名的字母序也相同則按照學生的年齡排序,並輸出N個學生排序後的資訊。

輸入描述:

測試資料有多組,每組輸入第一行有一個整數N(N<=1000),接下來的N行包括N個學生的資料。
每個學生的資料包括姓名(長度不超過100的字串)、年齡(整形數)、成績(小於等於100的正數)。

輸出描述:

將學生資訊按成績進行排序,成績相同的則按姓名的字母序進行排序。
然後輸出學生資訊,按照如下格式:
姓名 年齡 成績

學生姓名的字母序區分字母的大小寫,如A要比a的字母序靠前(因為A的ASC碼比a的ASC碼要小)。

輸入樣例:

3
abc 20 99
bcd 19 97
bed 20 97

輸出樣例:

bcd 19 97
bed 20 97
abc 20 99

解題思路:

額,這道水題就是在這道PAT乙級水題(連結:成績排名)的基礎上加了一個年齡的排序而已。無腦用vector然後sort沒什麼意思。

AC程式碼:

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

struct stu
{
    string name;   //姓名
    int age,score; //年齡、分數
};

bool Cmp(stu &a, stu &b)
{
    if(a.score == b.score)
    {
        if(a.name == b.name)
        {
            return a.age < b.age;    //如果姓名的字母序也相同則按照學生的年齡排序
        }
        else return a.name < b.name;  //如果成績相同則按姓名字元的字母序排序
    }
    else return a.score < b.score;   //按成績高低排序
}

int main()
{
    int n;
    cin >> n;
    vector<stu> v;
    for(int i =0; i < n; i++)
    {
        int temp_age,temp_score;
        string temp_name;
        cin >> temp_name >> temp_age >> temp_score;
        v.push_back({temp_name,temp_age,temp_score});
    }
    sort(v.begin(),v.end(),Cmp);
    for(auto it : v)
    {
        cout << it.name << " " << it.age << " " << it.score << endl;
    }
    return 0;
}