题目描述
小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。
如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。
请你计算 最多 能喝到多少瓶酒。
示例1:
输入:numBottles = 9, numExchange = 3
输出:13
解释:你可以用 3 个空酒瓶兑换 1 瓶酒。
所以最多能喝到 9 + 3 + 1 = 13 瓶酒。
示例2:
输入:numBottles = 15, numExchange = 4
输出:19
解释:你可以用 4 个空酒瓶兑换 1 瓶酒。
所以最多能喝到 15 + 3 + 1 = 19 瓶酒。
题解
本题是个简单题目,一个递归酒可以完成,
class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
if(numBottles<numExchange){
return numBottles;
}
//包含开始的酒数量
int res = numBottles;
int yu = 0;
//如果换来的酒数量+剩余的空瓶子数量>换的个数,就喝完再换,直到不能换
while(numBottles+yu>=numExchange){
int newYu = (numBottles+yu)%numExchange;
numBottles = (numBottles+yu)/numExchange;
res += numBottles;
yu = newYu;
}
return res;
}
//官方题解
// public int numWaterBottles(int numBottles, int numExchange) {
// int bottle = numBottles, ans = numBottles;
// while (bottle >= numExchange) {
// bottle -= numExchange;
// ++ans;
// ++bottle;
// }
// return ans;
// }
// 官方数学方法
// public int numWaterBottles(int numBottles, int numExchange) {
// return numBottles >= numExchange ? (numBottles - numExchange) / (numExchange - 1) + 1 + numBottles : numBottles;
// }
}
总结
本题比较简单,主要是递归逻辑保证下次换酒的时候考虑上次剩余的空瓶子。
知识点:
1、递归
2、数学方法(推导过程)