给你两个整数numBottles和numExchange 。numBottles代表你最初拥有的满水瓶数量。
在一次操作中,你可以执行以下操作之一:
- 喝掉任意数量的满水瓶,使它们变成空水瓶。
- 用
numExchange个空水瓶交换一个满水瓶。然后,将numExchange的值增加 1 。
注意,你不能使用相同的 numExchange 值交换多批空水瓶。例如,如果 numBottles == 3 并且 numExchange == 1 ,则不能用 3 个空水瓶交换成 3 个满水瓶。
返回你最多可以喝到多少瓶水。
示例 1:

输入:numBottles = 13, numExchange = 6
输出:15
解释:上表显示了满水瓶的数量、空水瓶的数量、numExchange 的值,以及累计喝掉的水瓶数量。
示例 2:

输入:numBottles = 10, numExchange = 3
输出:13
解释:上表显示了满水瓶的数量、空水瓶的数量、numExchange 的值,以及累计喝掉的水瓶数量。
提示:
1 <= numBottles <= 1001 <= numExchange <= 100
思路:
这道题中只能逐次交换空瓶, 且交换成本 numExchange 会因交换而累加,因此每次能换到手中的满瓶水数量其实恒为 1,交换后能喝的水数量恒为 1,手中空瓶的增长速度也恒定为 1。
AC代码:
class Solution {
public:
int maxBottlesDrunk(int numBottles, int numExchange) {
int result = numBottles;
while(numBottles >= numExchange)
{
numBottles = numBottles - numExchange + 1;
numExchange += 1;
result += 1;
}
return result;
}
};Code language: C++ (cpp)