2013年10月19日 星期六

[UVA] 591 - Box of Bricks

/*20131019 hanting*/
//這題要把每一個積木堆都變成一樣高度
//我的想法是先算出每一堆積木的數量的平均,然後再考慮哪幾堆少於平均的
//如果有一堆少於平均,那就是高於平均的一堆要把一個積木拿來給少於平均的那一堆,此時移動積木數+1
#include <iostream>
using namespace std;
int main()
{
    int k,t=0;
    while(cin>>k)//輸入次數(共有幾堆)
    {
        int total=0,p,acount=0,again=1;
        t++;
        if(k==0)//題目說輸入0就表示結束
        {
            return 0;
        }
        int a[k];//a[k]表示第幾堆
        for(int i=0;i<k;i++)
        {
            cin>>a[i];//輸入a[i]的積木的數量,其中i=0~k-1,就是有k組積木堆
            total+=a[i];//算出總共多少積木
        }
        p=total/k;//每一堆積木的平均值

        while(again==1)//如果again=1,再跑一次
        {
             again=0;
            for(int i=0;i<k;i++)//如果該堆積木少於平均數,那就將該堆積木堆+1,移動次數+1
            {
                if(a[i]<p)
                {
                    a[i]++;
                    acount++;
                }
            }
            for(int i=0;i<k;i++)//掃描美意堆積木是否還有少於平均數堆,若有again=1
            {
                if(a[i]<p)
                     again=1;
            }
        }
        cout<<"Set #"<<t<<endl;
        cout<<"The minimum number of moves is "<<acount<<"."<<endl<<endl;//這裡要兩個endl喔
    }
    return 0;
}

沒有留言:

張貼留言