【牛客網】[編程題]成績排序
- 2019 年 11 月 8 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/shiliang97/article/details/102568379
查找和排序
題目:輸入任意(用戶,成績)序列,可以獲得成績從高到低或從低到高的排列,相同成績 都按先錄入排列在前的規則處理。
示例: jack 70 peter 96 Tom 70 smith 67
從高到低 成績 peter 96 jack 70 Tom 70 smith 67
從低到高
smith 67
jack 70 Tom 70 peter 96
輸入描述:
輸入多行,先輸入要排序的人的個數,然後輸入排序方法0(降序)或者1(升序)再分別輸入他們的名字和成績,以一個空格隔開
輸出描述:
按照指定方式輸出名字和成績,名字和成績之間以一個空格隔開
示例1
輸入
3 0 fang 90 yang 50 ning 70
輸出
fang 90 ning 70 yang 50
感覺好坑啊,也沒人說要永遠循環下去呀~· 可能是我讀題腦子有問題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include #include #include using namespace std; struct stu{ int num; int score; string name; }; bool cm1(stu s1,stu s2){ if(s1.score!=s2.score){ return s1.score<s2.score; }return s1.num<s2.num; } bool cm0(stu s1,stu s2){ if(s1.score!=s2.score){ return s1.score>s2.score; }return s1.num<s2.num; } int main(){ int a,b; while(cin>>a>>b){ vector v; stu st; string name; int score; for(int i=0;i<a;i++){ cin>>name>>score; st.name=name; st.score=score; st.num=i; v.push_back(st); } if(b==0){ sort(v.begin(),v.end(),cm0); }else{ sort(v.begin(),v.end(),cm1); } for(int i=0;i<v.size();i++){ //cout<<v[i].name<<" "<<v[i].score<<endl; printf("%s %dn",v[i].name.c_str(),v[i].score); } } return 0; } |
|---|
