0
点赞
收藏
分享

微信扫一扫

二分贪心--21


题目大概:

有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;
}








举报

相关推荐

0 条评论