Java实现啤酒空瓶瓶盖问题的算法

参考
https://zhidao.baidu.com/question/434231281731283604.html

原回答漏算了新瓶盖数和新空瓶数,经过修改后算法如下:

    /**
     * 啤酒2元1瓶,4个瓶盖可换一瓶,2个空瓶可换一瓶,问10元可喝多少瓶
     *
     * @param money 钱数
     * @return 总共可喝到的瓶数
     */
    public static int calc(int money) {
        // sum 总瓶数;cap 瓶盖数;bottle 空瓶数
        int sum, cap, bottle;
        sum = cap = bottle = money / 2;
        while (cap >= 4 || bottle >= 2) {
            // 瓶盖兑换
            sum += cap / 4;

            // 空瓶兑换
            sum += bottle / 2;

            // 瓶盖和空瓶共兑换到的啤酒数(同时等于新瓶盖数和新空瓶数)
            int rep = cap / 4 + bottle / 2;

            // 新瓶盖数+旧瓶盖数
            cap = rep + cap % 4;

            // 新空瓶数+旧空瓶数
            bottle = rep + bottle % 2;
        }
        return sum;
    }

你可能感兴趣的:(Java实现啤酒空瓶瓶盖问题的算法)