班级学生成绩
描述
输出班级学生总成绩单和查询成绩对应的学生姓名和分数。
总成绩排名按照分数从大到小排列,如果成绩相同则按照姓名字典序排列(字典序小的排在前面)。
查询成绩时,如果遇到成绩相同的学生,输出姓名字典序 最大 的学生姓名和其分数。
字典序:
两个字符串自左向右逐个字符相比(按ASCII值大小相比较),
直到遇到不同的字符或遇'\0'为止,ASCII值小的排前面(字典序小),大的放后面(字典序大)。
如:"A"<"B" "a">"A" "computer">"compare"。
输入
第一行包含一个整数 n,学生个数。1 <= n <= 100。
接下来的 n 行是学生成绩列表,每一行是每位学生的名字和他的成绩,
中间用单个空格隔开。其中名字只包含字母且长度不超过 20,成绩为一个不大于 100 的非负整数。
最后一行为要查询的学生成绩。输入保证无重名学生。
输出
前 n 行,为所有学生的成绩单,按照成绩从大到小排列,
如果遇到成绩相同的学生,按照姓名字典序(从小到大)进行排序,
每一行是每位学生的名字和他的成绩, 中间用单个空格隔开。
第 n + 1 行为空行。
最后一行,也就是第 n + 2 行,为查找成绩对应的学生姓名和分数,中间用单个空格隔开。
如果遇到成绩相同的学生,输出姓名字典序最大的学生姓名和其分数。
如果成绩没有在输入数据范围,则输出 -1。
样例输入
8
Tony 67
Kenny 88
Anna 80
Wayne 78
Charlie 88
Julia 78
David 90
Elsa 87
78
样例输出
David 90
Charlie 88
Kenny 88
Elsa 87
Anna 80
Julia 78
Wayne 78
Tony 67
Wayne 78
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct student{
int score;
char name[50];
};
bool compare(student s1,student s2){
if (s1.score<s2.score)
return false;
else
if (s1.score>s2.score)
return true;
else
if (strcmp(s1.name,s2.name)<0)
return true;
else
return false;
}
int main(){
int n=0,m=0,find=0;
student l[100],f;
cin>>n;
for (int i=0;i<n;i++){
cin>>l[i].name>>l[i].score;
}
cin>>m;
sort(l,l+n,compare);
for (int i=0;i<n;i++){
cout<<l[i].name<<" "<<l[i].score<<endl;
}
return 0;
}