zoj1847
该属于简单题,但涉及一个取整或许有所麻烦,精确解应该是求出平均值,再求偏差绝对值和除 2。这里由于精确到分,求出平均值 mean,按分求出 ceil 和 floor 的值。然后对于每个人,若钱 < mean,求与 floor 偏差绝对值加到总和中,否则与 ceil 求。另外,记录偏差(不取绝对值总和),如果最后总偏差不为 0,要将总偏差绝对值加到总和中。最后输出总和一半即可。
#include<stdio.h> int main() { int n,i; double money[1005]; double sum1,sum2,p,p1,p2; while(scanf("%d",&n)&&n) { for(i=0,p=0;i<n;i++) { scanf("%lf",&money[i]); p+=money[i]; } p=p/n; p2=p1=(int)(p*100); p1=p1/100.0; if(p2<(p*100)) p2++; p2=p2/100.0; for(i=0,sum1=0,sum2=0;i<n;i++) { if(money[i]<p) sum1=sum1+p1-money[i]; else sum2=sum2+money[i]-p2; } if(sum1>sum2) printf("$%.2lf\n",sum1); else printf("$%.2lf\n",sum2); } return 0; }