n 个同学的语数英成绩,请计算他们的总分并根据总分输出前5名同学的姓名和总分(如果总分相同,则语文成绩高者排名靠前;如果语文成绩相同,则数学成绩高者排名靠前;如果数学成绩相同,则英语成绩高者排名靠前;若英语成绩相同,则学号小的排名靠前)
输入格式 第一行输入一个正整数 n(5≤n≤50),代表班级学生人数。 接下来的 n 行每行包含四个数据:姓名 语文成绩 数学成绩 英语成绩 其中,姓名长度不超过5,三科成绩范围为: 0 ∼ 100 0∼100。输入顺序即学号,第一行学号为1,第二行学号为2……
输出格式 输出前五名同学姓名及总分,每行一位同学。 格式为:姓名 总分 我代码
#include<bits/stdc++.h>
using namespace std;
int n;
struct student{
string name;
int ch,m,eng;
int cnp,id;
int sum;
}a[100005];
bool cmp(student x,student y){
if(x.sum!=y.sum){
return x.sum>y.sum;
}else{
return x.id<y.id;
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].name>>a[i].ch>>a[i].m>>a[i].eng;
a[i].sum=a[i].ch+a[i].m+a[i].eng;
}
sort(a,a+n,cmp);
for(int i=0;i<5;i++){
//这里应该有判断同分谁先输出的,但是我的错了,所以我不放了()
if(a[i].sum<=a[0].sum){
cout<<a[i].name<<" "<<a[i].ch+a[i].m+a[i].eng<<endl;
}
}
return 0;
}
[acgo的题](https://www.acgo.cn/problemset/1840/info?teamCode=166418176115571507)