[LeetCode] 3100. 换水问题 II

给你两个整数numBottlesnumExchange 。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 <= 100
  • 1 <= 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)