原题描述
超市正在促销,你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始,你一共购入了 numBottles 瓶水。
如果喝掉了水瓶中的水,那么水瓶就会变成空的。
给你两个整数 numBottles 和 numExchange ,返回你 最多 可以喝到多少瓶水。
示例1
输入:numBottles = 9, numExchange = 3
输出:13
解释:你可以用 3 个空瓶兑换 1 瓶水。
所以最多能喝到 9 + 3 + 1 = 13 瓶水。
示例2
输入:numBottles = 15, numExchange = 4
输出:19
解释:你可以用 4 个空瓶兑换 1 瓶水。
所以最多能喝到 15 + 3 + 1 = 19 瓶水。
思路
对数学中除法和取模的运用,使用除法(/)可以计算当前水瓶可以兑换多少瓶水,取模(%)计算不满足numExchange的水瓶。
解题方法
计算可以兑换水的数量。
sum+=numBottles/numExchange;
计算兑换水之后空瓶的数量。
//计算剩下空瓶数量 numBottles/numExchange 兑换水的数量,
//会转换为空瓶,numBottles%numExchange是不满足兑换1瓶水的空瓶数量
numBottles=numBottles/numExchange+numBottles%numExchange;
只要剩下的空瓶还能兑换水,就进行循环,直到不能兑换为止。
//初始有numBottles瓶水
int sum=numBottles;
//剩下水瓶可以兑换至少一瓶水,产生一个新的空瓶
while (numBottles>=numExchange){
//累计可以获得水的数量
sum+=numBottles/numExchange;
//计算剩下空瓶数量 numBottles/numExchange 兑换水的数量,
//会转换为空瓶,numBottles%numExchange是不满足兑换1瓶水的空瓶数量
numBottles=numBottles/numExchange+numBottles%numExchange;
}
Code
class Solution {
public int numWaterBottles(int numBottles, int numExchange) {
//初始有numBottles瓶水
int sum=numBottles;
//剩下水瓶可以兑换至少一瓶水,产生一个新的空瓶
while (numBottles>=numExchange){
//累计可以获得水的数量
sum+=numBottles/numExchange;
//计算剩下空瓶数量 numBottles/numExchange 兑换水的数量,
//会转换为空瓶,numBottles%numExchange是不满足兑换1瓶水的空瓶数量
numBottles=numBottles/numExchange+numBottles%numExchange;
}
//返回计算累计兑换水的数量
return sum;
}
}