二分贪心--21

来源:互联网 发布:yankee candle 知乎 编辑:程序博客网 时间:2024/06/09 21:40

题目大概:

有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 0
原创粉丝点击