題目連結: 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;
    }
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay