1.8 KiB
1.8 KiB
1518.换酒问题
小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。
如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。
请你计算 最多 能喝到多少瓶酒。
输入:numBottles = 9, numExchange = 3 输出:13 解释:你可以用 3 个空酒瓶兑换 1 瓶酒。 所以最多能喝到 9 + 3 + 1 = 13 瓶酒。
输入: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;
}
};

