top1编程
← 返回题目
题解

小小演唱家

1 条题解

  • 0
    @ 2026-8-5 12:14:09

    解题思路

    这道题要我们当一回"小小评委"!规则是这样的:

    5位评委打分,去掉一个最高分,去掉一个最低分,剩下3个分数加起来就是最终得分。

    想一想,怎么算最方便呢?其实我们可以换个思路:

    1. 先把5个分数全部加起来得到一个总分;
    2. 同时一边读一边把最高分和最低分记下来;
    3. 最后用总分减去最高分、再减去最低分,剩下的不就是中间3个分数的和吗?

    打个比方:你有5颗糖果,想知道中间3颗糖果一共有多少克,最快的办法就是先把5颗一起称一称,再单独拿出最重的那颗和最轻的那颗,从总重量里减掉它们。

    因为题目保证5位评委的打分都不同,所以最高分和最低分都只有一个,不用担心"最高分和最低分是同一个"的情况。

    参考代码

    // P4600 小小演唱家:去掉一个最高分和一个最低分,剩下3个分数相加
    #include <iostream>
    using namespace std;
    
    int main() {
        int a[5], mx = 0, mn = 101, sum = 0;
        for (int i = 0; i < 5; i++) {
            cin >> a[i];
            sum += a[i];        // 先把5个分数都加起来
            if (a[i] > mx) mx = a[i];  // 找最高分
            if (a[i] < mn) mn = a[i];  // 找最低分
        }
        // 总分去掉最高分和最低分,就是最终得分
        cout << sum - mx - mn << endl;
        return 0;
    }
    

    复杂度分析

    • 我们只需要把5个分数依次读入并处理,处理的次数是固定的5次,和输入规模无关,所以时间复杂度是 O(1)(常数时间)。
    • 我们只用了一个长度固定的数组和几个变量,空间复杂度也是 O(1)。

    总之,这道题不管分数是多少,程序都很快很快,因为它只需要处理5个数。

    • 1