【牛客网】[编程题]成绩排序
- 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; } |
---|