1 条题解
-
0
题意分析
题目描述的是国际小丑和皮耶罗比赛(ICPC)的评分规则。在这个比赛中,每个参赛者的表演由多位评委打分,为了公平起见,计算最终得分时需要去掉一个最高分和一个最低分(如果有多个相同的最高分或最低分,只去掉其中一个),然后对剩下的分数求平均值,最后将平均值向下取整得到整数作为最终得分。
输入输出要求
输入:
- 输入包含多个数据集,每个数据集对应一个参赛者的表演评分。
- 每个数据集的第一行是一个整数n(3 ≤ n ≤ 100),表示评委的数量。
- 接下来的n行,每行一个整数s(0 ≤ s ≤ 1000),表示每个评委给出的分数。
- 输入以一行单独的0结束。
输出:
- 对于每个数据集,输出一行,包含一个整数,表示该参赛者的最终得分(去掉一个最高分和一个最低分后的平均分,向下取整)。
解题思路
- 读取输入: 使用循环读取每个数据集,直到遇到0为止。
- 处理每个数据集:
- 读取评委数量n。
- 读取n个评委的分数,存储在数组中。
- 对数组进行排序,这样可以方便地去掉最低分(第一个元素)和最高分(最后一个元素)。
- 计算剩余分数的总和(总和减去最低分和最高分)。
- 计算平均值:总和除以(n - 2),然后向下取整(直接使用整数除法即可)。
- 输出结果: 对每个数据集,输出计算得到的最终得分。
解决代码
#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
- 上传者