兩隻水壺 c++版

alansleep發表於2013-04-18
// 函式註釋,輸出就相當於說明了,去掉些檢測條件,核心就while 那3行.
// 瓶子大小,目標剩餘可以為任意.
// 函式會列印出勾兌步驟.



// a 為瓶a 容積大小
// b 為瓶b 容積大小
// c 為最終在某一個瓶內的水的大小

void cppfn(int a, int b, int c = 3)
{
    // 標記出大,小瓶
    int big = a > b ? a : b;
    int sma = a > b ? b : a;

    // 判斷引數是否合理
    if (c > a || c > b)
        return;

    // 如果2瓶的差額不能和目標大小整除,則勾兌不了.
    if (c % (big - sma)!= 0)
        return;

    // 定小瓶為目標瓶,即要有c升水,目前為0剩
    int r = 0;   
    int i = 0;

    cout<<"開始:大瓶 "<<big<<" 升,小瓶 "<<sma<<" 升."<<endl;
    while (r != c)
    {
        int t = big - sma + r;
        cout<<"流程 "<<++i<<" :大瓶打滿 "<<big<<" 升水,倒給已有 "<<r<<" 升水的小瓶,大瓶自身剩餘 "<<t<<" 升水."<<endl;
        r = t;
         cout<<"流程 "<<++i<<" :將小瓶水倒掉,並將大瓶內剩餘的 "<<t<<" 升水倒給小瓶."<<endl;
    }
    cout<<"結束: 小瓶剩餘 "<<r<<" 升水."<<endl;
} 

相關文章