1 条题解

  • 0
    @ 2025-7-17 10:32:34

    题意分析

    题目描述的是国际小丑和皮耶罗比赛(ICPC)的评分规则。在这个比赛中,每个参赛者的表演由多位评委打分,为了公平起见,计算最终得分时需要去掉一个最高分和一个最低分(如果有多个相同的最高分或最低分,只去掉其中一个),然后对剩下的分数求平均值,最后将平均值向下取整得到整数作为最终得分。

    输入输出要求

    输入:

    • 输入包含多个数据集,每个数据集对应一个参赛者的表演评分。
    • 每个数据集的第一行是一个整数n(3 ≤ n ≤ 100),表示评委的数量。
    • 接下来的n行,每行一个整数s(0 ≤ s ≤ 1000),表示每个评委给出的分数。
    • 输入以一行单独的0结束。

    输出:

    • 对于每个数据集,输出一行,包含一个整数,表示该参赛者的最终得分(去掉一个最高分和一个最低分后的平均分,向下取整)。

    解题思路

    1. 读取输入: 使用循环读取每个数据集,直到遇到0为止。
    2. 处理每个数据集:
      • 读取评委数量n。
      • 读取n个评委的分数,存储在数组中。
      • 对数组进行排序,这样可以方便地去掉最低分(第一个元素)和最高分(最后一个元素)。
      • 计算剩余分数的总和(总和减去最低分和最高分)。
      • 计算平均值:总和除以(n - 2),然后向下取整(直接使用整数除法即可)。
    3. 输出结果: 对每个数据集,输出计算得到的最终得分。

    解决代码

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int scores[110];
    
    int main() {
        int num;
        while (cin >> num) {
            if (num == 0) break;
            int sum = 0;
            for (int i = 0; i < num; i++) {
                cin >> scores[i];
                sum += scores[i];
            }
            sort(scores, scores + num);
            sum -= (scores[0] + scores[num - 1]);
            int ans = sum / (num - 2);
            cout << ans << endl;
        }
        return 0;
    }
    

    代码解释

    • 输入处理: 使用while循环读取每个数据集的评委数量num,直到读取到0为止。
    • 分数读取与求和: 使用for循环读取每个评委的分数,并累加求和到sum中。
    • 排序与调整: 使用sort函数对分数数组进行排序,便于去掉最低分(scores[0])和最高分(scores[num - 1])。
    • 计算平均值: 从总和中减去最低分和最高分,然后除以(num - 2)得到平均值,整数除法自动向下取整。
    • 输出结果: 打印计算得到的最终得分。

    该解决方案高效且直接,利用了排序和简单的算术运算来满足题目要求。

    • 1

    信息

    ID
    2326
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者