问题:你有k瓶可乐,兑换规则为每a个瓶盖可以换一瓶可乐,问总共可以和多少瓶可乐?
方法一:数学方法
a个瓶盖换一瓶可乐:
相当于可以用a-1个瓶盖,兑换一瓶无盖的可乐;
例如a为3的时候,当有(3-1)个瓶盖的时候,可以向商家‘借’一个瓶盖凑齐3个满足了规则换来一瓶可乐,然后将瓶盖还给商家。
那么结果是不是 k/(a-1)呢?不对
假设 x%(a-1) == 0,则最后一个(a-1)不能兑换一个没盖子的可乐,需要a个才能换一个没盖子的可乐。因为这个交换本质上是“透支的”,而这个交换只有在剩余的盖子数大于a的时候才能进行,所以最后一次交换至少剩余一个盖子,所以最后一个盖子本质上没有用;
因此
可以喝 a + (a-1)/(k-1);
方法二:循环写法
// 可乐换瓶盖;共有 n 元钱, 每瓶m元,每k个瓶盖兑一瓶;
public static int exchange(int n, int m, int k){
// 开始不换一共能喝first瓶
int first = n / m;
int total = first;
// 开始用first个盖子进行兑换
while (first > k){
// first个盖子能换second瓶
int second = first / k;
// 计入总数
total += second;
// 用seconde个盖子继续上述流程
first = second;
}
return total;
}