#include <stdio.h>
#include <algorithm>
#define MAX_NUM 1005
int a[MAX_NUM];
long long sum;
int cmp(const void *a, const void *b)
{
return *((int*)b) - *((int*)a);
}
void func(int n)
{
int aver, yu_shu;
long long change_sum;
int i;
aver = sum / n;
yu_shu = sum % n;
qsort(a, n, sizeof(int), cmp);
if(yu_shu == 0)
{
change_sum = 0;
for(i=0; i<n; i++)
{
if(a[i] > aver)
change_sum += a[i]-aver;
else
break;
}
}
else
{
change_sum = 0;
for(i=0; i<yu_shu; i++)
{
if(a[i] > aver+1)
change_sum += a[i]-aver-1;
else
break;
}
for(i=yu_shu; i<n; i++)
{
if(a[i] > aver)
change_sum += a[i]-aver;
else
break;
}
}
printf("$%.2lf\n", change_sum/100.0);
}
int main(void)
{
int n, i;
int start, end;
while(1)
{
scanf("%d", &n);
if(!n)
break;
sum = 0;
for(i=0; i<n; i++)
{
scanf("%d.%d", &start, &end);
a[i] = int(start*100+end);
sum += a[i];
}
func(n);
}
return 0;
}
这道题本身是简单题目,但是wa一整天,最后发现是读数据的方法不对,我是将浮点数转化为整数来计算的,开始时候直接 这样转换:int(x*100),可能是精度问题,一直产生错误,换成这样 scanf("%d.%d", &start, &end); a[i] = int(start*100+end);就好了,我去,太坑爹了,对于浮点数向整数的强制类型转换还要研究一下。