链接:https://www.luogu.com.cn/problem/T156529?contestId=37420
来源:洛谷传智杯练习赛
题目描述
小 A 参加一个综艺节目。一共有 n(3 \le n \le 10^6)n(3≤n≤106) 名评委参与打分(分数范围是 0 到 100 的整数),每个评委依次亮出自己的得分。
为了节目效果,要求从第三个评委开始,每当第 ii 个评委给出打分后,立刻计算出出这个选手在前 ii 名评委的打分中,去掉一个最高分和一个最低分,剩下 i-1i−1 个评委的平均分,保留 22 位小数。
输入格式
第一行输入一个整数 nn,表示评委人数。
第二行输出 nn 个整数,表示各个评委的打分。
输出格式
输出共 n-2n−2 行,每行表示对应的答案。
输入输出样例
输入 #1
6
11 45 14 19 19 81
输出 #1
14.00
16.50
17.33
24.25
思路
本来使用的是优先队列,分别定义两个一个按最大值一个按最小值排序,然后再每一次读入数据的时候都放入队列中,直到第三个的时候开始用现在的合减去最大值和最小值除以i-2即可,但是测试用例成功了,提交失败。所以重来,直接用一个最大值和最小值储存当前的最
大值和最小值,然后当第三个评委开始评分的时候,每次都减去最大值和最小值,除以i-2,输出每次的结果即可,但是C++会超时,最后把代码改成C语言就通过了。
代码
#include
int main()
{
int n,grade,max=0,min=101,sum=0; scanf("%d",&n);
for (int i = 1; i <= n; i++)
{
scanf("%d",&grade);
if (grade > max)max = grade;
if (grade < min)min = grade;
sum += grade;
if (i >= 3)
{
printf("%.2lf\n",(sum - max - min) * 1.0 / (i - 2));
}
}
return 0;
}
运行结果
!
AC了
11.22日 第三周加油
昨天参加的传智杯的练习赛,只做出来四道题,排名241,还是有点菜,继续努力