1518. 换水问题 Water Bottles

问题描述

所谓的兑换空瓶子, 问题就是 商与余数(DivMod) 的问题.

想到这个方向, 就简单了. 但要考虑到几个细节问题:

  • num_bottles 就是被除数
  • num_exchange 就是除数
  • 一次兑换交易, 从空瓶子换成满瓶水, 就是一个整数的除法操作
  • 既然是整数除法, 那就有可能还有余数

div-mod

代码里有更详细的注释:

#![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
}
}