喝汽水問題

    /**
     * 共有1000瓶汽水,沒喝完一瓶獲得一個空瓶子,每3個空瓶子又能換1瓶汽水,喝掉之後又獲得一個空瓶子,問總共能喝多少瓶汽水,最後還剩餘多少個空瓶子
     */
    public static void drink(){
        int num = 1000, empty = 0, total = 0;
        while(num > 0){
            num --;//喝掉一瓶汽水,那麼喝掉的汽水總數又多1,此時空瓶數又多1,須要判斷空瓶數是否整除3,如果則又能夠兌換1瓶汽水,空瓶數爲0,如此遞歸,直到汽水數爲0
            total ++;
            empty ++;
            if(empty % 3 == 0){
                num ++;
                empty = 0;
            }
        }
        System.out.println(String.format("total=%d, empty=%d", total, empty));
    }
    
    public static void drink2(){
        int num = 1000, empty = 0, total = 0;
        while(num > 0){
            System.out.println(String.format("total=%d, empty=%d", num, empty));
            total += num;//直接將剩餘的全部汽水喝掉,那麼喝掉的汽水總數就增長了剛喝掉的num,此時空瓶數則爲剛喝掉的汽水數num,而此時的空瓶又能夠兌換empty/3瓶汽水,而且剩餘的空瓶數爲兌換前空瓶總數-兌換的汽水數*3,如此遞歸,直到汽水數爲0
            empty += num;
            num = empty / 3;
            empty = empty - num * 3;
        }
        System.out.println(String.format("total=%d, empty=%d", total, empty));
    }

 

1)喝掉1000瓶,剩餘0瓶
1000
0

2)、上次有空瓶1000個,可兌換333瓶汽水,故本次能夠喝掉333瓶,剩餘1個空瓶
333
1

3)、上次有空瓶333+1個,可兌換111瓶汽水,故本次能夠喝掉111瓶,剩餘1個空瓶
111
1

4)、上次有空瓶111+1個,可兌換37瓶汽水,故本次能夠喝掉37瓶,剩餘1個空瓶
37
1

5)、上次有空瓶37+1個,可兌換12瓶汽水,故本次能夠喝掉12瓶汽水,剩餘2個空瓶
12
2

6)、上次有空瓶12+2個,可兌換4瓶汽水,故本次能夠喝掉4瓶汽水,剩餘2個空瓶
4
2

7)、上次有空瓶4+2個,可兌換2瓶汽水,故本次能夠喝掉2瓶汽水,剩餘0個空瓶
2
0

8)、上次有空瓶2個,已沒法兌換,本次結束

 

參考資料:html

http://www.cnblogs.com/flyinghearts/archive/2011/09/23/2186593.htmlspa

相關文章
相關標籤/搜索