第一五一八题_换酒问题
小区便利店正在促销,用 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;
}


浙公网安备 33010602011771号