问题标题: 酷町堂:5517

0
0
已解决
武建豪
武建豪
中级天翼
中级天翼

经验值: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追加了内容


0
已采纳
沙宸安
沙宸安
高级启示者
高级启示者

请问您这是double类型的吗?

沙宸安在2020-10-21 19:17:35追加了内容

如果还不对,问我。

我要回答