题目链接:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1§ionid=2&problemid=8
方法:无
思路:求平均值,然后逐个扫描与平均值的差值,差值相加,注意最后结果是扫描结果的二分之一,因为移动一个木块到另外一个木块补齐至平均高度,只移动了一个木块,但是却完成了两个列的补齐工作。
难点:别忘了除以2就行了。
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n;
int i;
int nummer = 1;
while(~scanf("%d",&n))
{
if (n == 0) break;
int num = 0;
int sum = 0;
int a[100] = {0};
for (i = 0;i < n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
sum /= n;
//printf("%d\n",sum);
for (i = 0;i < n;i++)
{
num+=abs(a[i]-sum);
}
printf("Set #%d\n",nummer);
printf("The minimum number of moves is %d.\n\n",num/2);
nummer++;
}
}