问题是什么:
现在只有两只杯子AB,容量分别是:M升和N升,在只用这两个杯子的前提下,怎样操作可以得到K升水?
分析问题的过程:
明确能够获得的信息:
问题中的参数
先来明确一下问题中总共有几个参数:
首先能够确定的是两个常量AB的容量:M和N;(M ⩾ \geqslant ⩾N)
我们将一个杯子为空,一个杯子非空时看作为一次测量的结束。问题让我们求解的结果K(0 ⩽ \leqslant ⩽K ⩽ \leqslant ⩽M)就可以看作是结束完某次测量后中有水水杯中存储水的体积。而我们可以设结束完一次测量后有水容器中存储水的体积为X(0 ⩽ \leqslant ⩽X ⩽ \leqslant ⩽M)
最后还有两个不易发现的参数:AB水杯分别中剩余空间的大小,我们可以设他们分别为: Y A ( 0 ⩽ Y A ⩽ M ) , Y B ( 0 ⩽ Y B ⩽ N ) Y_A(0\leqslant Y_A \leqslant M),Y_B(0\leqslant Y_B \leqslant N) YA(0⩽YA⩽M),YB(0⩽YB⩽N)
测量水方法的总结和分析
方法总结
要解决这个问题最重要的便是如何通过两个水杯测量。一般有三种方法:
第一种方法( F 1 F_1 F1)是:在不注入新水的情况下,通过将储存在容量为M杯子中储存的水 X 旧 X_旧 X旧,倒满容量为N的空杯子,来获得 X 新 X_新 X新。由此可知:
- X 新 = X 旧 − N X_新=X_旧-N X新=X旧−N
- N ⩽ X 旧 ⩽ M N \leqslant X_旧 \leqslant M N⩽X旧⩽M
- 0 < X 新 ⩽ M − N 0 < X_新 \leqslant M-N 0<X新⩽M−N;
第二种和第三种方法均为,通过新水注满一个杯子后,将杯中一部分水倒满因存有 X 旧 X_旧 X旧而改变的另外一个杯子的剩余空间Y,来获得 X 新 X_新 X新
注满的杯子的容量为M的情况下( F 2 F_2 F2),我们可以得到:
- X 新 = M − Y B = M − ( N − X 旧 ) = X 旧 + ( M − N ) X_新=M-Y_B=M-(N-X_旧)=X_旧+(M-N) X新=M−YB=M−(N−X旧)=X旧+(M−N)
- 0 ⩽ X 旧 ⩽ N 0 \leqslant X_旧 \leqslant N 0⩽X旧⩽N
- M − N ⩽ X 新 ⩽ M M-N\leqslant X_新 \leqslant M M−N⩽X新⩽M
注满的杯子的容量为N的情况下( F 3 F_3 F3),我们可以得到:
- X 新 = N − Y B = M − ( M − X 旧 ) = X 旧 − ( M − N ) X_新=N-Y_B=M-(M-X_旧)=X_旧-(M-N) X新=N−YB=M−(M−X旧)=X旧−(M−N)
- M − N ⩽ X 旧 ⩽ M M-N \leqslant X_旧 \leqslant M M−N⩽X旧⩽M
- 0 ⩽ X 新 ⩽ N 0\leqslant X_新 \leqslant N 0⩽X新⩽N
初始情况的分析
因为初始情况时X=0,所以只能进行 F 2 F_2 F2
方法分析
我们不难发现 F 2 F_2 F2与 F 3 F_3 F3互为逆过程,又因为初始情况只能进行 F 2 F_2 F2,所以 F 3 F_3 F3对整体测量没有作用,因此对整体测量来说只有 F 1 F_1 F1和 F 2 F_2 F2起作用。
结论
最终我们发现只需要判断 F 1 F_1 F1和 F 2 F_2 F2进行的次数即可,即a(M-N)-bN=K中次数a,b的值。