2017年5月24日 星期三

UVA Q591:Box of Bricks

Q591:Box of Bricks
3歲的小明喜歡玩他的方塊積木,他總是把方塊疊在一起形成高度不一的方塊堆。然後他說:這是一面牆。5歲的姊姊小美聽到了就跟小明說:真正的牆高度應該要一樣才行。小明聽了覺得有道理於是決定要搬動一些方塊使所有方塊堆的高度一樣。如下圖。由於小明是個懶惰的小孩,他想要搬動最小數目的方塊以達成這個目的,你能幫助他嗎?

  
Input
輸入包含好幾組資料,每組資料有2行,第一行有一個數字n,代表有幾堆方塊。第二行有n個數字分別代表這n堆方塊的高度hi。你可以假設1<=n<=50  1<=hi<=100
方塊的總數一定可以整除堆數
n,也就是說一定可以使所有的方塊堆同樣高度。
如果輸入的
n=0,代表輸入結束。 
Output
對每一組輸入資料,首先輸出一行這是第幾組測試資料,下一行為"The minimum number of moves is k." k在這裡就是需搬動方塊最小的數目以使所有的方塊堆同一高度。每組測試資料後亦請空一行。請參考Sample Output. 
Sample Iutput
6
5 2 4 1 7 5
3
1 1 1
0
Sample Output
Set #1
The minimum number of moves is 5.

Set #2
The minimum number of moves is 0.

#include<iostream>
#include<math.h>
#include<cstring>
#include<iomanip>
using namespace std;
int main(){
 int a,b[50],c,d,e=0;
 while(cin>>a){
  e++;
  if(a==0){
   break;
  }
  c=0;
  d=0;
  for(int x=0;x<a;x++){
   cin>>b[x];
   c=c+b[x]; 
  }
  c=c/a;
  for(int x=0;x<a;x++){
   if(b[x]>c){
    d=d+b[x]-c;
   }
  }
  cout<<"Set #"<<e<<endl<<"The minimum number of moves is "<<d<<"."<<endl<<endl;
 }
system ("pause");
return 0;
}