你的排序算法写错了,冒泡排序的循环是:
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个一样的那么取第一个。