2014 青年歌手大奖赛_评委会打分
Problem Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
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
#include<cstdio>
#define maxn 101
void max_min(double a[], int n){//注意以数组为参数的函数写法
double max = -1, min = 101;//注意max和min的设定
int p1 = 0, p2 = 0;
for(int i = 0; i < n; i++){
if(a[i] > max){
max = a[i];
p1 = i;
}
if(a[i] < min){
min = a[i];
p2 = i;
}
}
//printf("%lf", a[p1]);
a[p1] = 0;
a[p2] = 0;
}
double average(double a[], int n){
double sum = 0;
for(int i = 0; i < n; i++){
sum += a[i];
}
return sum/(n - 2);//注意最高和最低分变为0之后算平均分分子要变成n-2
}
int main(){
int n;
while(scanf("%d", &n) != EOF){
double a[maxn] = {0};
double max = 101, min = -1;
for(int i = 0; i < n; i++){
scanf("%lf", &a[i]);
}
max_min(a, n);
printf("%.2lf\n", average(a, n));
}
return 0;
}
- 思想上我想到的去掉最低分和最高分就是让对应数组的元素变成0。所以说在判断每一个元素是否是最大或是最小值是就要一起判断,或者是先去掉最低分再去掉最高分。如果先将最高分变成0再去判断最低分肯定是认定这个0是最低分,就会起不到作用。