2014 青年歌手大奖赛_评委会打分

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是最低分,就会起不到作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值