描述
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
输入第一行为n (0 < n < 20),表示班里的学生数目;
接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。输出把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
样例输入
4 Kitty 80 Hanmeimei 90 Joey 92 Tim 28样例输出
Joey 92 Hanmeimei 90 Kitty 80 Tim 28
题意总结
首先输入学生数目n,接下来的n行每行为一个学生的名字和他的成绩,中间用空格隔开。从大到小输出学生成绩和名字如果有相同分数则名字字典序小的在前。
解题思路
建立结构体数组w,用来存储成绩。输入名字与成绩。对于从大到小排序我们可以使用sort。最后输出排序后的名字与成绩,不要忘记用空格隔开。
代码解决
#include<bits/stdc++.h>
using namespace std;
struct a{ //绑定学生的成绩与名字
string n;
int lj;
}; bool c(a d,a e){ if(d.lj==e.lj){//如果成绩相同 return d.n<e.n;//按照名字从大到小排序 } else{//否则 return d.lj>e.lj;//按照成绩从大到小排序 } } int main(){ int n; cin>>n;//输入学生人数 a w[10000]; for(int i=1;i<=n;i++){ cin>>w[i].n>>w[i].lj;//输入名字和成绩 } sort(w+1,w+n+1,c);//从大到小排序成绩 for(int i=1;i<=n;i++){ cout<<w[i].n<<" "<<w[i].lj<<endl;//输出排序好的成绩,需要换行并且用空格隔开 } return 0; }标签:03,成绩,int,lj,名字,从大到,排序 From: https://www.cnblogs.com/mnknjk/p/17157454.html