m0_62497154 2021-10-09 10:39 采纳率: 50%
浏览 38
已结题

只对了一半(>﹏<),后半程的代码有啥问题,求解

img

img

img

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-10-09 10:45
    关注

    你的排序算法写错了,冒泡排序的循环是:
    for(i = 0; i < 4;i++) //这里是 i < n-1(也就是i < 4)
    {
    for(j=0;j < 4-i;j++) //这里是 j < n-i-1(也就是i < 4-i )
    }
    用不着排序,只需要找到最大值和最小值即可
    代码修改如下:

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        int a[5],b[5],max,min,i;
        int index = -1;
        float ds,dsmin; 
        double avg = 0;
        for(i=0;i<5;i++)
        {
            scanf("%d %d",&a[i],&b[i]);
    
            avg += b[i]; //求所有评分的和
            //找最大值和最小值,并记录
            if(i==0)
            {
                max = b[0];
                min = b[0];
                
            }else
            {
                if (b[i] > max)
                {
                    max = b[i];
                }
                if(b[i] < min)
                {
                    min = b[i];
                }
            }
    
        }
        avg = (avg - max - min)/3.0; //去掉最高分和最低分后求平均分
    
        //求最接近平均分的
        for (i=0;i<5;i++)
        {
            ds = fabs(b[i]-avg); //求评分与均值的差值的绝对值
            if(index == -1)
            {
                dsmin = ds;
                index = a[i]; //最公平评委编号
            }else
            {
                if(ds < dsmin)
                {
                    dsmin = ds;
                    index = a[i];
                }
            }
        }
        printf("%.2lf\n");
        printf("%d",index);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月9日