第一五一八题_换酒问题

题目链接

小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。
如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。
请你计算 最多 能喝到多少瓶酒。

法一 贪心

思路: 一开始有numBottles瓶酒,numExchange瓶空的可以换瓶新的酒(一瓶酒 + 一个酒瓶), 则一开始就有numBottles个空瓶子,可以兑换numBottles/numExchange瓶酒,剩余numBottles%numExchange个空瓶,则总共喝的瓶数为一开始买的numBottles + 换的numBottles/numExchange瓶酒,此时,又会喝出来numBottles/numExchange + 之前剩下的numBottles%numExchange个空瓶,再去兑换,直到剩余的空瓶子小于numExchange.

/**
 * @author 无法手执玫瑰
 * 2020/08/0026 21:14
 */
public class 第一五一八题_换酒问题 {
    public static int numWaterBottles(int numBottles, int numExchange) {
        int emptyBottles = numBottles;
        while(emptyBottles >= numExchange){
            numBottles = numBottles + emptyBottles/ numExchange;
            emptyBottles = emptyBottles % numExchange + emptyBottles/ numExchange;
        }
        return numBottles;
    }

    public static void main(String[] args) {
        System.out.println(numWaterBottles(9, 3));
    }
}

法二:递归

思路:

public static int numWaterBottles(int numBottles, int numExchange) {
        //如果兑换不了了 就返回喝的酒瓶数
        if(numBottles < numExchange){
            return numBottles;
        }
        //可交换得到的新酒个数
        int numCanExchange = numBottles /numExchange;
        //剩下没兑换掉的空瓶数
        int numRemain = numBottles % numExchange;
        //喝的酒数
        int count = numBottles - numRemain;
        count += numWaterBottles(numCanExchange + numRemain,numExchange);
        return count;
    }

posted @ 2020-08-27 09:27  无法手执玫瑰  阅读(119)  评论(0)    收藏  举报