2014年5月22日 星期四

[UVa] 11150 - Cola

11150 - Cola

輸入 N 瓶可樂,

3 瓶可樂空瓶可以換 1 瓶可樂,

問總可以喝到幾瓶可樂?

(當然,最後剩下兩瓶可樂空瓶時,可以多借一瓶空瓶,

最後當然要還回去!!)




首先,

來個循規蹈矩的寫法


#include < iostream >
using namespace std;
int main()
{
    int n;
    while( cin >> n )
    {
        // 喝的瓶數( sum ),剩餘的空瓶( emp )
        int sum = 0, emp = 0;

        // n + emp >= 3 時,也就是不用借瓶子的狀況下
        while( n + emp > 2 )
        {
            // 喝的瓶數 += 現有的可樂數
            sum += n;

            // 空瓶數 = 現有的可樂數 + 上次剩餘空瓶數
            emp += n;

            // 每 3 個空瓶換 1 瓶可樂
            n = emp / 3;

            // 換完剩餘空瓶數
            emp %= 3;
        }

        // 最後一次換的可樂將不會喝到,所以補喝
        sum += n;

        // 如果空瓶數為 2 ,可以借一個空瓶,換一瓶可樂,所以喝的可樂數 +1
        if( n + emp == 2 )
            sum ++;

        // 輸出總共喝多少可樂
        cout << sum << endl;
    }
    return 0;
}

再來,來個精簡版!

看看下表有何規律


n 1 2 3 4 5 6 7 8 9 10 11 12 13 14
sum 1 3 4 6 7 9 10 12 13 15 16 18 19 21


n = 1 時,sum = 1。
n = 2 時,sum = 3,跟 n = 1 時差 2 。
n = 3 時,sum = 4,跟 n = 2 時差 1 。
n = 4 時,sum = 6,跟 n = 3 時差 2 。
n = 5 時,sum = 7,跟 n = 4 時差 1 。
n = 6 時,sum = 9,跟 n = 5 時差 2 。
n = 7 時,sum = 10,跟 n = 6 時差 1 。
n = 8 時,sum = 12,跟 n = 7 時差 2 。
n = 9 時,sum = 13,跟 n = 8 時差 1 。
......

所以,可以這樣寫

#include < iostream >
using namespace std;
int main()
{
    int n;
    while( cin >> n )
        cout << int( n * 1.5 ) << endl;
    return 0;
}

沒有留言:

張貼留言