【题解】P5738 歌唱比赛

题面

题目描述

n(n100)n(n\le 100) 名同学参加歌唱比赛,并接受 m(m20)m(m\le 20) 名评委的评分,评分范围是 0 到 10 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 m2m-2 个评分的平均数。请问得分最高的同学分数是多少?评分保留 2 位小数。

输入格式

输出格式

输入输出样例

输入#1

7 6
4 7 2 6 10 7
0 5 0 10 3 10
2 6 8 4 3 6
6 3 6 7 5 8
5 9 3 3 8 1
5 9 9 3 2 0
5 8 0 4 1 10

输出#1

6.00

思路

首先定义一个结构体,里面存放各个评委给出的分数、总分数和平均分。

然后写一个初始化函数:

node() {
    memset(this->score, 0x00, sizeof(this->score));
    all = sum = 0.00;
}

再写一个处理函数:

void t(int m) {
    for (int i = 0; i < m; i++) {
        cin >> score[i];
    }
    std::sort(score, score + m);
    for (int i = 1; i + 1 < m; i++) {
        sum += score[i];
    }
    all = sum / (m - 2.00);
}

这个处理函数分为了三部分:读入排序按题目要求计算平均分

代码

#include <bits/stdc++.h>

using namespace std;

struct node {
    int    score[22];
    double sum, all;

    node() {
        memset(this->score, 0x00, sizeof(this->score));
        all = sum = 0.00;
    }

    void t(int m) {
        for (int i = 0; i < m; i++) {
            cin >> score[i];
        }
        std::sort(score, score + m);
        for (int i = 1; i + 1 < m; i++) {
            sum += score[i];
        }
        all = sum / (m - 2.00);
    }
};

bool cmp(node a, node b) {
    return a.all > b.all;
}

int main() {
    int  n, m;
    node student[105];
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        student[i].t(m);
    }
    sort(student, student + n, cmp);
    printf("%.2lf", student[0].all);
    return 0;
}
【题解】P5738 歌唱比赛
本文作者
宝硕
发布于
2020-09-22
更新于
2021-03-21
许可协议
喜欢这篇文章?为什么不考虑打赏一下作者呢?
爱发电
文章目录
  1. 题面
    1. 题目描述
    2. 输入格式
    3. 输出格式
    4. 输入输出样例
  2. 思路
  3. 代码