[恢]hdu 1326

2011-12-27 15:46:58

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1326

题意:n个高矮不等的堆。每次可以从一个堆拿一块移动到另一堆。问最少移动多少次能使他们全都相等。

mark:好经典的题目,不记得在哪儿看到过不只1次了。每个和平均数的差加起来除以二。

代码:

# include <stdio.h>


int num[60] ;
int n ;


int abs(int n){return n<0?-n:n;}


int main ()
{
int i, sum ,ans, nCase = 1 ;
while (~scanf ("%d", &n) && n)
{
sum = 0 ;
for (i = 0 ; i < n ; i++)
{
scanf ("%d", &num[i]) ;
sum += num[i] ;
}
sum /= n ;
ans = 0 ;
for (i = 0 ; i < n ; i++)
ans += abs(sum-num[i]) ;
printf ("Set #%d\n", nCase++) ;
printf ("The minimum number of moves is %d.\n\n", ans/2) ;
}
return 0 ;
}



posted @ 2012-01-06 23:57  Seraph2012  阅读(191)  评论(0编辑  收藏  举报