题目:
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
Input
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。
Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。
Sample Input
3 99 98 97
4 100 99 98 97
Sample Output
98.00
98.50
问题分析:
这道题并不是想不出解题方法,只是感觉存在最优解但想不到,有点嫌弃自己冗长复杂的解法。就是录入数组并逐个排查 最后改数值为0再遍历相加,最后输出平均值。
但如果按照我的解法就要用到数组,并且还要额外遍历两边寻找最大值和最小值
其实这道题可用数组可不用数组
什么时候要用数组呢?
当每个数据都要记录下来二次使用时就要
如输出比平均值大的数字
第一次算平均值 第二次遍历数组比较大小并输出数据
但其实两次是可以合成一次 但真的没想到!
如下这个边写入边比较大小
MIN = 101是为了确保第一个数据能够写进来
代码分析:
#include <stdio.h>
int main(void)
{
//declare the data.
int num;
int score[100];
while (~scanf("%d", &num))
{
int max=0;
int min=101;
double sum = 0;
for ( int n=0; n<num; n++ )
{
scanf("%d", &score[n]);
if ( max<score[n] )
{
max = score[n];
int flag_max = n;
}
if ( min>score[n] )
{
min = score[n];
int flag_min = n;
}
sum += score[n];
}
printf("%.2f\n", (sum-min-max)/(num-2));
}
return 0;
}