题解
小小演唱家
1 条题解
-
0
解题思路
这道题要我们当一回"小小评委"!规则是这样的:
5位评委打分,去掉一个最高分,去掉一个最低分,剩下3个分数加起来就是最终得分。
想一想,怎么算最方便呢?其实我们可以换个思路:
- 先把5个分数全部加起来得到一个总分;
- 同时一边读一边把最高分和最低分记下来;
- 最后用总分减去最高分、再减去最低分,剩下的不就是中间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