中级天翼
经验值:800
题目描述 Description
酷町堂举办了一次文件操作模拟赛,共有4道题目,现在要按照4道题目的平均分从高到低排序。如果分数相同,保持在输入中的顺序输出。
要求:求平均分要定义成一个返回值为double类型的结构体函数。
输入描述 Input Description
第一行,一个整数n,表示人数
接下来n行,每行有准考证号、第一题分数、第二题分数、第三题分数、第四题分数,准考证号是一个5位的字符串,由字母和数字构成
输出描述 Output Description
n行,每行一个排序后的准考证号
样例输入 Sample Input
5 BM001 100 0 0 100 BM002 100 20 80 80 BM003 100 100 0 100 BM004 100 100 100 0 BM005 100 100 100 100
样例输出 Sample Output
BM005 BM003 BM004 BM002 BM001
数据范围及提示 Data Size & Hint
n<=10000
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
struct stu {
string name;
int s1, s2, s3, s4;
int pos;
int score;
} a[10010];
bool cmp (stu x, stu y) {
if (x.score != y.score) {
return x.score > y.score; //按照成绩排序
}
return x.pos < y.pos; //如果成绩相同,就按输入顺序排
}
int n;
int main()
{
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].s1>>a[i].s2>>a[i].s3>>a[i].s4;
a[i].pos = i; //存输入顺序,以便排序
a[i].score=a[i].s1+a[i].s2+a[i].s3+a[i].s4;//算总分
}
sort(a+1,a+n+1,cmp);
for (int i = 1; i <= n; i ++) {
cout << a[i].name << endl;
}
return 0;
}
武建豪在2020-10-24 21:23:42追加了内容
顶