题目大概:
有n堆积木,积木高度不同,每个小方块高度相同。问,最少移动多少小方块,使得这些积木堆高度相等。
思路:
先求这些积木的平均数,在把所有的高度与平均数的差值加起来,最后除2,就是最少移动的方块数。
感想:
这个题有一点很坑人,最后输出的时候有一个小点,不注意看看不到。
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{int n,l=1;
while (scanf("%d",&n))
{if(n==0)break;
int a[50],sum=0;
for(int i=0;i<n;i++)
{scanf("%d",&a[i]);
sum+=a[i];
}
sum=sum/n;
int sam=0;
for(int i=0;i<n;i++)
{int k;
k=a[i]-sum;
if(k<0)k=-k;
sam+=k;
}
sam=sam/2;
printf("Set #%d\n",l);
printf("The minimum number of moves is %d.\n\n",sam);
l++;
}
return 0;
}