题意:让求最少的交易总数,使每位同学花费的钱一样多,但是差额可以在一分以内
也就是说平均值小数点后第三位要四舍五入,最后要在两个方向上计算,小于平均值的,和大于平均值的,取这两个值中的最小值
一般大家都会只考虑其中一个方向我也是,只考虑大的没考虑小的,导致一直wa我很郁闷,也不明白为什么错,知道遇到一组数据
5
0.01
0.01
0.01
0.01
0.03
他的最终结果晕应该是
$0.00
而不是 $0.02,
如果你只按照大的计算就会得到$0.02但是如果按照小的就是$0.00很变态吧
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxnum 100
double money[maxnum];
int n;
int main()
{
int i;
double sum;
double s,s1,s2;
while(cin>>n)
{
if(n==0) break;
sum=0;
for(i=0;i<n;i++)
{
cin>>money[i];
sum+=money[i]*100;
}
sum/=n;
sum+=0.5;
sum=(int)sum;
sum/=100;
s1=0;
s2=0;
for(i=0;i<n;i++)
if(money[i]>sum)
s1+=money[i]-sum;
else
s2+=sum-money[i];
s=s1<s2? s1:s2;
printf("$%.2lf\n",s);
}
return 0;
}