OJ, VJ青年歌手大奖赛_评委会打分

青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。
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<stdio.h>
    #include<math.h>
    int main()
    {
        int n, i, max, min, maxsign, minsign;
        double sum, average;
        while(scanf("%d", &n) != EOF)
        {
            sum = 0;
            maxsign = 0; minsign = 0;
            double a[10000] = {0};

            for( i = 0; i < n; i++)
                scanf("%lf", &a[i]);
            max = a[0], min = a[0];
            for(i = 0; i < n; i++)
            {
                //max = a[0], min = a[0];我犯错了老是想我是不是语句有错误,哪里基本知识又不够啊。很少想自己的逻辑错误。给学长一看就看出了我的逻辑错误。
                if(a[i] >= max)
                {
                   max = a[i];
                   maxsign = i;
                }
                if(a[i] < min)			//if(a[i] <= min)代码基本功能实现后还要想特殊情况的,这样功能才完美。右边这注释掉的好几行是之前写的代码。如果这里写等号且按下面的最大最小都置为0的话,当所有评委都打100分的话,那么最大最小就在最后了。我只会把一个数值置0.这里不用等号最大最小才不会出现在同一个下标。
                {
                    min = a[i];
                    minsign = i;
                }
            }
                                            //a[maxsign] = 0;
                                            //a[minsign] = 0;
         for(i = 0; i < n; i++)
            sum += a[i];                   //for(i = 0; i < n; i++)
                                                // sum += a[i];
        average = (sum - max - min)/(n-2);
                                            //average = sum/(n-2);
        printf("%.2lf\n", average);

        }
        return 0;
    }

以下是不用数组的写法

 # include<stdio.h>
    #include<math.h>
    int main()
    {
        double n, i, max, min, sum, average, a;
        while(scanf("%lf", &n) != EOF)
        {
            sum = 0;
            min = 101;
            max = -1;
            for( i = 0; i < n; i++)
                {
                    scanf("%lf", &a);///scanf会有一个缓冲区,把读进来的数据都放到缓冲区里。
                                    ///等scanf结束后按先进先出的方式,把数据释放出来继续跑下去。
                    sum += a;
                    if(a > max)
                        max = a;
                    if(a < min)
                        min = a;
                }
            average = (sum - max - min)/(n-2);
            printf("%.2lf\n", average);
        }
        return 0;
    }

第二个解法是参考网址https://zhidao.baidu.com/question/144013865.html
的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值