【逻辑题】塘中取水
问题
假设有一个池塘,里面有无穷多的水。现有 2 个空水壶,容积分别为 5 升和 6 升。请问如何只用这 2 个水壶从池塘里取得 3 升水?
引申:如何取得 1 ~ 4 升水?
分析
两个水壶无法直接量出 3 升,需要通过倒水组合出目标量。关键操作:装满、倒空、在两个壶之间转移。
5 升和 6 升的最大公约数是 1,因此理论上可以量出 1 ~ 6 升之间的任意整数升水。
取得 3 升
| 步骤 | 操作 | 5L 壶 | 6L 壶 |
|---|---|---|---|
| 1 | 装满 5L | 5 | 0 |
| 2 | 5L 倒入 6L | 0 | 5 |
| 3 | 装满 5L | 5 | 5 |
| 4 | 5L 倒入 6L 直至 6L 满(需 1L) | 4 | 6 |
| 5 | 倒空 6L | 4 | 0 |
| 6 | 4L 倒入 6L | 0 | 4 |
| 7 | 装满 5L | 5 | 4 |
| 8 | 5L 倒入 6L 直至 6L 满(需 2L) | 3 | 6 |
最终 5L 壶中剩余 3 升。
引申:取得 1 ~ 4 升
1 升
步骤 1~4 之后 5L 壶有 4L,6L 壶满。倒空 6L,将 4L 倒入 6L,再装满 5L 倒入 6L(需 2L),5L 壶剩 1L。
2 升
| 步骤 | 操作 | 5L 壶 | 6L 壶 |
|---|---|---|---|
| 1 | 装满 6L | 0 | 6 |
| 2 | 6L 倒入 5L | 5 | 1 |
| 3 | 倒空 5L | 0 | 1 |
| 4 | 1L 倒入 5L | 1 | 0 |
| 5 | 装满 6L | 1 | 6 |
| 6 | 6L 倒入 5L 直至 5L 满(需 4L) | 5 | 2 |
最终 6L 壶中剩余 2 升。
4 升
步骤 1~4 直接得到 5L 壶中 4L。
总结
这类倒水问题的通用思路:
- 确认两壶容量是否互质(gcd=1),互质则可量出任意整数升
- 用表格跟踪每步两个壶的剩余量,避免混乱
- 目标量 = 大壶倒满后向小壶转移的「剩余差值」