1518. 换水问题 Water Bottles
所谓的兑换空瓶子, 问题就是 商与余数(DivMod) 的问题.
想到这个方向, 就简单了. 但要考虑到几个细节问题:
num_bottles
就是被除数num_exchange
就是除数- 一次兑换交易, 从空瓶子换成满瓶水, 就是一个整数的除法操作
- 既然是整数除法, 那就有可能还有余数
代码里有更详细的注释:
#![allow(unused)] fn main() { pub fn num_water_bottles(num_bottles: i32, num_exchange: i32) -> i32 { // 满瓶水的数量 let mut full_bottles = num_bottles; // 已经喝了多少瓶 let mut count = 0; // 空瓶子的数量 let mut empty_bottles = 0; // 当还有满瓶的水, 或者空瓶子的数量大于最小兑换数时, 游戏就可以进行 while full_bottles > 0 || empty_bottles >= num_exchange { // 喝水 count += full_bottles; // 收集空的瓶子 empty_bottles += full_bottles; // 把空瓶子兑换成满瓶的水 full_bottles = empty_bottles / num_exchange; // 可能还会剩下一些空瓶子在本次无法兑换 empty_bottles %= num_exchange; } count } }