水題 成績排序 (vector的練習)
阿新 • • 發佈:2019-01-10
題目描述:
有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; }