C++與演算法

解答 - Box of Bricks

移動一個方塊,可以讓兩疊方塊的高度各靠近平均值一步

所以我們需要先計算平均值,再看看每疊方塊需要移動幾步。


這個題目我們需要掃過兩次陣列:

1. 將每疊方塊的數目存到陣列中,並且加總、計算平均

2. 加總 每疊方塊的數目與平均的差 (注意結果正負)

將[2.]的結果除以2即是解答。

#include<iostream>
using namespace std;

int main()
{
    int h[60];
    int n, sum, avg, ans, i;

    cin >> n;


    sum = 0;
    for( i=0 ; i<n ; i=i+1 )
    {
        cin >> h[i];
        sum = sum+h[i];
    }


    avg = sum/n;
    ans = 0;
    for( i=0 ; i<n ; i=i+1 )
    {
        if( avg > h[i] )
            ans = ans + avg-h[i];
        if( avg < h[i] )
            ans = ans + h[i]-avg;
    }
    ans = ans/2;


    cout << "The minimum number of moves is " << ans << "." << endl;
    cout << endl;

    return 0;
}