K11983 期末排名表

98 篇文章 1 订阅
16 篇文章 0 订阅

(注:此文章采用C++语言写法,并非C、C#、Python、Python3写法,请留意您的编程语言!!!)


题目描述

科丁小学的六一班期末考试成绩出来了,班主任准备把全班的成绩做一个排名表,发送给各个家长。

每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按英语成绩从高到低排序,如果英语成绩都还相同,那么再按照学号排序,学号小的同学排在前面。

请你帮助班主任完成这个工作吧。

输入格式

第1行为一个正整数n,不超过100,表示该班级的学生数量。

第2到n+1行,每行有3数字,每个数字都在0到100之间,分别表示语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n。

输出格式

输出文件共n行,表示最终的排名表,每行表示一条学生信息,信息依次为学号、总分、语文成绩、数学成绩、英语成绩

输入输出样例

输入样例1:
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
输出样例1:
6 265 78 89 98
4 264 88 99 77
3 258 78 89 91
2 244 87 66 91
1 237 90 67 80
5 220 67 89 64
输入样例2:
8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
输出样例2:
8 265 78 89 98
2 264 88 98 78
6 264 88 99 77
5 258 78 89 91
1 258 80 89 89
4 244 87 66 91
3 237 90 67 80
7 220 67 89 64

【耗时限制】1000ms 【内存限制】128MB


代码如下:

#include <iostream>
#include <algorithm>
using namespace std;

struct stu{
    int id, yw, sx, yy, sum;
}a[110];
bool cmp(const stu &x, const stu &y){
    if (x.sum != y.sum)
        return x.sum > y.sum;// 先按总分从高到低排序
    if (x.yy != y.yy)
        return x.yy > y.yy;// 如果两个同学总分相同,再按英语成绩从高到低排序
    return x.id < y.id;// 如果英语成绩都还相同,那么再按照学号排序,学号小的同学排在前面
}
int main(){
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].yw >> a[i].sx >> a[i].yy;
        a[i].id = i;
        a[i].sum = a[i].yw + a[i].sx + a[i].yy;
    }
    sort(a + 1, a + n + 1, cmp);
    for (int i = 1; i <= n; i++) {
        cout << a[i].id<<' '<<a[i].sum<<' '<<a[i].yw<<' '<<a[i].sx<<' '<<a[i].yy<<endl;
    }
    return 0;
}

希望对您有所帮助!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值