班级学生成绩

班级学生成绩

描述

输出班级学生总成绩单和查询成绩对应的学生姓名和分数。
总成绩排名按照分数从大到小排列,如果成绩相同则按照姓名字典序排列(字典序小的排在前面)。
查询成绩时,如果遇到成绩相同的学生,输出姓名字典序 最大 的学生姓名和其分数。

字典序:
两个字符串自左向右逐个字符相比(按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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值