題目連結: https://zerojudge.tw/ShowProblem?problemid=c067
# 內容
小明決定要搬動一些方塊使所有方塊堆的高度一樣。由於小明是個懶惰的小孩,他想要搬動最小數目的方塊以達成這個目的,你能幫助他嗎?
# 輸入
輸入包含好幾組資料,每組資料有 2 行,第一行有一個數字 n,代表有幾堆方塊。第二行有 n 個數字分別代表這 n 堆方塊的高度 hi。
你可以假設 1<=n<=50 , 1<=hi<=100
方塊的總數一定可以整除堆數 n,也就是說一定可以使所有的方塊堆同樣高度。
如果輸入的 n=0,代表輸入結束。
# 輸出
對每一組輸入資料,首先輸出一行這是第幾組測試資料,下一行為 "The minimum number of moves is k." k 在這裡就是需搬動方塊最小的數目以使所有的方塊堆同一高度。每組測試資料後亦請空一行。
# 解題思路
先算出所有的平均,再把所有數與平均數的差 (取絕對值) 全部加起來後除以 2,就是答案了,
# 程式碼
#include<iostream> | |
#include<cmath> | |
using namespace std; | |
int main() | |
{ | |
int n,sum,avg,total,num=0; | |
while(cin>>n&&n) | |
{ | |
num++; | |
int a[n]; | |
sum=0; | |
total=0; | |
for(int i=0;i<n;i++) | |
{ | |
cin >> a[i]; | |
sum += a[i]; | |
} | |
avg = sum/n; | |
cout<<"Set #"<<num<<endl; | |
for(int i=0;i<n;i++) | |
total+=abs(a[i]-avg); | |
cout<<"The minimum number of moves is "<<total/2<<"."<<endl; | |
} | |
} |