题目描述
可达鸭里的学生们越来越出色!为了表彰他们的努力和优秀表现,学校决定向期末成绩优秀的前五名学生发放激励金。每个学生在期末都有参加C++、Python和Scratch这三门课程的考试,并获得了相应的成绩。学校按照以下规则对学生进行排名:首先按照总分从高到低排序,如果两个学生的总分相同,则按照C++成绩从高到低排序;如果两个学生的总分和C++成绩都相同,则学号较小的学生排在前面。
输入描述
第一行为一个正整数n(n小于300,n大于等于5),表示参加评选的学生人数。
第2~n+1行,每行有三个数字,每个数字都在0~100之间。第j行的三个数字依次表示学生为j-1的学生的C++、Python、Scratch的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减一)。所给的数据都是正确的,不必检验
输出描述
共有5行,每行是两个用一个空格隔开的正整数,依次表示为5名学生的学号和总分。
样例
输入
10 78 44 40 91 91 83 98 51 54 61 88 33 77 46 83 76 93 67 66 68 61 76 35 69 68 79 36 90 90 84
输出
2 265 10 264 6 236 5 206 3 203
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct stud{
int sum=0;
int c,q,s;
int num;
}stu[301];
bool cmp(stud a,stud b){
if(a.sum>b.sum){
return 1;
}
else if(a.sum==b.sum){
if(a.c>b.c){
return 1;
}
else if(a.c==b.c){
if(a.num<b.num){
return 1;
}
else{
return 0;
}
}
else{
return 0;
}
}
else{
return 0;
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>stu[i].c>>stu[i].q>>stu[i].s;
stu[i].sum=stu[i].c+stu[i].q+stu[i].s;
stu[i].num=i;
}
sort(stu+1,stu+1+n,cmp);
for(int i=1;i<=5;i++){
cout<<stu[i].num<<" "<<stu[i].sum<<endl;
}
return 0;
}