汽水瓶

題目描述

有這樣一道智力題:「某商店規定:三個空汽水瓶能夠換一瓶汽水。小張手上有十個空汽水瓶,她最多能夠換多少瓶汽水喝?」
答案是5瓶,方法以下:先用9個空瓶子換3瓶汽水,喝掉3瓶滿的,喝完之後4個空瓶子,用3個再換一瓶,
喝掉這瓶滿的,這時候剩2個空瓶子。而後你讓老闆先借給你一瓶汽水,喝掉這瓶滿的,喝完之後用3個空瓶子換一瓶滿的還給老闆。
若是小張手上有n個空汽水瓶,最多能夠換多少瓶汽水喝?

輸入描述

輸入文件最多包含10組測試數據,每一個數據佔一行,僅包含一個正整數n(1<=n<=100),表示小張手上的空汽水瓶數。
n=0表示輸入結束,你的程序不該當處理這一行。

輸出描述

對於每組測試數據,輸出一行,表示最多能夠喝的汽水瓶數。若是一瓶也喝不到,輸出0。

輸入例子

3
10
81
0

輸出例子

1
5
40

算法實現

import java.util.Scanner;

/**
 * Declaration: All Rights Reserved !!!
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
        int num;
        while (scanner.hasNextInt() && (num = scanner.nextInt()) != 0) {
            System.out.println(bottle(num));
        }
        scanner.close();
    }

    private static int bottle(int num) {
        final int BASE = 3;

        if (num < BASE - 1 ) {
            return 0;
        }

        int result = 0;


        while (num > BASE - 1) {
            // 本次喝的飲料數
            int drink = num / BASE;
            // 總共喝的飲料
            result += drink;
            // 手上目前有的瓶子
            num = num % BASE + drink;
        }

        if (num == BASE - 1) {
            // 若是還有bASE-1個瓶子,那就能夠再向老闆借一瓶,喝完就有三個瓶子
            // 又能夠換一瓶,又多喝了一瓶
            result++;
        }

        return result;
    }
}
相關文章
相關標籤/搜索