(注:此文章采用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;
}
希望对您有所帮助!!!