成績排序(C++)
成績排序?信息奧賽一本通C++版基礎(chǔ)算法2數(shù)據(jù)排序1178?
【題目描述】
給出班里某門課程的成績單,請你按成績從高到低對成績單排序輸出,如果有相同分數(shù)則名字字典序小的在前。
【輸入】
第一行為n (0 < n < 20),表示班里的學生數(shù)目;
接下來的n行,每行為每個學生的名字和他的成績, 中間用單個空格隔開。名字只包含字母且長度不超過20,成績?yōu)橐粋€不大于100的非負整數(shù)。
【輸出】
把成績單按分數(shù)從高到低的順序進行排序并輸出,每行包含名字和分數(shù)兩項,之間有一個空格。
#include<bits/stdc++.h>//萬能頭?
using namespace std;
struct student{//結(jié)構(gòu)體函數(shù) (以后我會詳細解釋的)?
int score;//分數(shù)?
string name;//名字?
};?
student a[10000];//a數(shù)組把名字以及分數(shù)存儲到每一個下標里(每一個下標代表著每一個學生的分數(shù)以及姓名)?
int n;
int score_comp(student a,student b){//自定義排序函數(shù)?
if(a.score!=b.score){
return(a.score>b.score);//如果分數(shù)不相同,那么分數(shù)從大到小排?
}else{
return(a.name<b.name);//分數(shù)相同那么名字的首字母用字典序排序,從大到小排(ascll碼排)?
}
}
int main(){
cin>>n;//輸入要輸入多少名學生?
for(int i=0;i<n;i++){
cin>>a[i].name;//輸入學生的名字?
cin>>a[i].score;//輸入學生的分數(shù)?
}
sort(a+0,a+n,score_comp);//用score_comp的規(guī)則來排序這幾名學生的排名?
for(int i=0;i<n;i++){
cout<<a[i].name<<" "<<a[i].score<<endl;//按排名輸入每一個學生的名字以及分數(shù)?
}?
? ? return 0;
}