Description
Input
The total number of bricks will be divisible by the number of stacks. Thus, it is always possible to rearrange the bricks such that all stacks have the same height.
The input is terminated by a set starting with n = 0. This set should not be processed.
Output
Output a blank line after each set.
Sample Input
6 5 2 4 1 7 5 0
Sample Output
Set #1The minimum number of moves is 5.
题目描述
移动最小的积木,使每排积木的高相等,还要求每排必须相邻,求最小的移动积木数
解题思路
求移动最少的数目使所有的数目相等,我们可以用贪心的思想来想这个题,先求出平均的高度,不管比这个高度低的,将比它高的所有的木块取出,就能得出结果
源代码
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int a[1000]; int main() { int n,sum,x,y,f=0; while(cin>>n&&n) { f++; int i; sum=0; y=0; for(i=0;i<n;i++) { cin>>a[i]; sum+=a[i]; } x=sum/n; for(i=0;i<n;i++) { if(a[i]>x) y+=a[i]-x; } cout<<"Set #"<<f<<endl; cout<<"The minimum number of moves is "<<y<<"."<<endl<<endl; } return 0; }