# 1518.换酒问题 小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。 如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。 请你计算 最多 能喝到多少瓶酒。 ![1518.换酒问题](https://img-blog.csdnimg.cn/20201215173958151.png) 输入:numBottles = 9, numExchange = 3 输出:13 解释:你可以用 3 个空酒瓶兑换 1 瓶酒。 所以最多能喝到 9 + 3 + 1 = 13 瓶酒。 ![1518.换酒问题](https://img-blog.csdnimg.cn/20201215174130529.png) 输入:numBottles = 15, numExchange = 4 输出:19 解释:你可以用 4 个空酒瓶兑换 1 瓶酒。 所以最多能喝到 15 + 3 + 1 = 19 瓶酒。 示例 3: 输入:numBottles = 5, numExchange = 5 输出:6 示例 4: 输入:numBottles = 2, numExchange = 3 输出:2 提示: * 1 <= numBottles <= 100 * 2 <= numExchange <= 100 # 思路 这道题目其实是很简单的了,简单到大家都不以为这是贪心算法,哈哈 来分析一下: 局部最优:每次换酒用尽可能多的酒瓶。全局最优:喝到最多的酒。 局部最优可以推出全局最优,那么这就是贪心! 本题其实 每次环境 其实思路是简单的,但本题在 ``` // 这道题还是有陷阱啊,15 4 这个例子,答案应该是19 而不是18 class Solution { public: int numWaterBottles(int numBottles, int numExchange) { int result = numBottles; while (numBottles / numExchange) { result += numBottles / numExchange; // 所以不是 numBottles = (numBottles / numExchange) numBottles = (numBottles / numExchange) + (numBottles % numExchange); } return result; } }; ```