• 4078. 成绩表里找同学


    问题描述

    编写一个程序,读入 N 个同学的姓名和语数外三门功课的单科成绩,对其按照一定的排序规则排序形成一张成绩表(先按总分从高到低排序,总分相同则按语文成绩由高到低排序,仍然相同则按数学成绩由高到低排序,若总分和单科成绩均相同则最后按姓名的字典序排序)。最后给定一个数字 K(K<=N) ,输出在这张排好序的成绩表中位置在第 K 位的同学的姓名和总分。

    字典序举例说明:

    abc > abd
    a > aa
    

    输入输出描述

    输入

    • 第一行输入一个正整数 N(1<=N<=1024),代表接下来将录入 N 个学生的成绩。
    • 接下来 N 行录入 N 条学生的成绩记录,每条记录依次为姓名,语文成绩,数学成绩,英语成绩,这四个字段以空格分隔。姓名为字符串(仅包含小写字母,不含空格,长度<=19),学生之间不会重名。三科成绩均为整数(0~100)。
    • 最后输入一个正整数 K(1<=K<=N),代表需要在成绩表中从前往后找到的位置。

    输出

    • 在成绩表中从前往后处在第 K 位的同学的姓名和总分,中间以空格分隔。

    程序运行示例1

    Sample Input 1

    2
    tom 90 91 92
    lucy 91 90 92
    1
    

    Sample Output 1

    lucy 273
    

    程序运行示例2

    Sample Input 2

    4
    lily 90 100 88
    jack 87 79 95
    hanz 90 89 71
    david 90 89 71
    4
    

    Sample Output 2

    hanz 250
    


    #include<algorithm>
    #include<iostream>
    using namespace std;
    
    struct student{
        string name;
        int chinese;
        int math;
        int english;
    };
    
    student s[1025];
    
    bool compare(student a,student b){
        if(a.chinese+a.english+a.math!=b.english+b.chinese+b.math){
            return a.chinese+a.english+a.math>b.english+b.chinese+b.math;
        }else{
            if(a.chinese!=b.chinese){
                return a.chinese>b.chinese;
            }else{
                if(a.math!=b.math){
                    return a.math>b.math;
                }else{
                    if(a.english!=b.english){
                        return a.english>b.english;
                    }else{
                        return a.name<b.name;
                    }
                }
            }
        }
    }
    
    int main(){
        int n;
        //freopen("input.txt","r",stdin);
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>s[i].name>>s[i].chinese>>s[i].math>>s[i].english;    
        }
        sort(s,s+n,compare);
        int k;
        cin>>k;
        cout<<s[k-1].name<<" "<<s[k-1].chinese+s[k-1].english+s[k-1].math;
        return 0;
    } 
  • 相关阅读:
    MySQL CREATE EVENT创建任务计划 定时执行任务
    MYSQL 的一些基本操作
    PHP mktime() 函数
    php格式化数字:位数不足前面加0补足
    浅析大数据量高并发的数据库优化
    使用SquirrelMQ打造一个千万级数据更新量的应用
    MySQL行锁深入研究
    MySQL 学习笔记 一
    利用C#操作配置文件(转)
    每个分类取最新的几条的SQL实现(转载记录)
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/7911751.html
Copyright © 2020-2023  润新知