东方博宜OJ 1315:遥控飞机争夺赛 ← 结构体 + 结构体排序

【题目来源】
https://oj.czos.cn/p/1315

【题目描述】
红太阳杯遥控飞机大赛拉开帷幕。比赛规则为,每位选手让自己的飞机从起点到终点飞行 5 次,组委会记录 5 次的飞行的成绩之后去掉一个最大成绩、一个最小成绩后计算剩余 3 个成绩的平值(平均分保留 3 位小数)作为该选手的最终成绩。有 n 名选手参加了比赛,从键盘读入每位选手的编号以及他们的 5 次飞行的成绩。请根据 n 名选手的比赛成绩,编程计算出冠军、亚军、季军的编号以及组委会计算出的成绩。(假设不存在多名选手成绩正好一样)

【输入格式】
第一行为一个整数 n,代表参加比赛的选手数量(4≤n≤100)。
后面的 n 行,每行有 6 个数,第一个数是选手的编号,后 5 个数为选手的 5 次飞行的成绩。

【输出格式】
3 行:
第一行输出冠军的编号及飞行成绩(保留 3 位小数)用空格隔开 2 个数;
第二行输出亚军的编号及飞行成绩;
第三行输出季军的编号及飞行成绩。

【输入样例】
4
11 58 59 60 61 62
18 59 60 61 62 63
23 65 64 63 62 62 
10 60 61 61 65 62​​​​​​​

【输出样例】
23 63.000
10 61.333
18 61.000

【数据范围】
4≤n≤100​​​​​​​

【算法分析】
● 按结构体某一字段对结构体数组进行排序:https://blog.csdn.net/hnjzsyjyj/article/details/120184972

【算法代码】

#include <bits/stdc++.h>
using namespace std;

struct Player {
    int idx;
    double ave;
} p[105];

double score[10];

bool cmp(Player x,Player y) {
    return x.ave>y.ave;
}

int main() {
    int n;
    cin>>n;
    for(int i=0; i<n; i++) {
        cin>>p[i].idx;
        for(int j=0; j<5; j++) {
            cin>>score[j];
        }
        sort(score, score+5);

        double sum=0;
        for(int j=1; j<=3; j++) {
            sum+=score[j];
        }
        p[i].ave=sum/3;
    }

    sort(p,p+n,cmp);
    for(int i=0; i<3; i++) {
        printf("%d %.3f\n",p[i].idx,p[i].ave);
    }

    return 0;
}

/*
in:
4
11 58 59 60 61 62
18 59 60 61 62 63
23 65 64 63 62 62
10 60 61 61 65 62

out:
23 63.000
10 61.333
18 61.000
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/156489596
https://blog.csdn.net/hnjzsyjyj/article/details/156489323
https://blog.csdn.net/hnjzsyjyj/article/details/156488957
https://blog.csdn.net/hnjzsyjyj/article/details/156479934
https://blog.csdn.net/hnjzsyjyj/article/details/156466035
https://blog.csdn.net/hnjzsyjyj/article/details/120184972
https://oj.czos.cn/p/1315









 

posted @ 2026-01-02 08:58  Triwa  阅读(4)  评论(0)    收藏  举报