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

img

img

img

你的排序算法写错了,冒泡排序的循环是:
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;
}

你需要算标准差啊,这一步在哪呢,我怎么没有看到?
你根本都没有定义一个变量来记录谁的标准差最小,那你的10005是凭什么输出的呢
你算出平均值是8.67,那么你需要用所有的数减去8.67,然后看谁最接近。如果有2个一样的那么取第一个。