1、这题在精度上做文章,本来以为只要把所有大于平均值的部分相加或者所有小于平均值的部分相加就是答案,但是误差是会累积的,两者可能并不相等,因此选择较小的那个输出。在算平均值的时候,四舍五入可以减小误差。另外不要忘记初始化。都是细节。
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
int n;
double sum,ave,ans,ans2,a[1010];
while(scanf("%d",&n)==1&&n){
sum=0.0;
for(int i=0;i<n;i++){
scanf("%lf",&a[i]);
sum+=a[i];
}
ave=sum/n+0.005;ave=(int)(ave*100)/100.0;ans=0.0;ans2=0.0;
for(int i=0;i<n;i++)
if(a[i]>ave)
ans+=a[i]-ave;
else
ans2+=ave-a[i];
printf("$%.2lf\n",ans>ans2?ans2:ans);
}
return 0;
}