- 难度:简单
- 标签:贪心
- 问题:小区便利店正在促销,用numExchange个空酒瓶可以兑换一瓶新酒。你购入了numBottles瓶酒。如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。请你计算最多能喝到多少瓶酒。
- 我的题解
class Solution {
public:
int numWaterBottles(int numBottles, int numExchange) {
//drink 喝到多少瓶
//exchange 换来多少瓶
//numBottles 手里的瓶子数
int drink=numBottles;
int exchange;
while(numBottles>=numExchange){
exchange=numBottles/numExchange;
drink+=exchange;
numBottles=numBottles%numExchange+exchange;
}
return drink;
}
};
-
官方题解
- 可以用 numExchange 个酒瓶来换回一瓶酒,即每兑换手中的酒瓶数减少 numExchange-1 个,能够多喝到一瓶酒。
- numBottles-n(numExchange-1)<numExchange
- 我们的目的就是求得使该公式成立的最小的 n 的值。
class Solution {
public:
int numWaterBottles(int numBottles, int numExchange) {
return numBottles>=numExchange?(numBottles-numExchange)/(numExchange-1)+1+numBottles:numBottles;
}
};
- 注意
- 一开始是否有足够的酒瓶换酒
- 边界条件是很重要滴