有一个12品脱(pint)的酒瓶,里面装满葡萄酒,另有8品脱和5品脱的瓶子各一个。问如何从中分出6品脱的酒出来?
传说泊松年轻时成功解决了该问题,勾起了他对数学的兴趣而投身数学研究,因此该问题被称为泊松分酒问题。另外这个问题又被称为分油问题啦,分水问题啦等等。
小学的时候在一本《十万个问什么——数学卷》中看到过这个问题,那本书直接给出了一个解答过程,又没说原理,看得我糊里糊涂。
一 . 解答过程
为了方便说明,将容量为12品脱,8品脱,5品脱瓶子分别称为大瓶子,中瓶子,小瓶子。按照下面2种规则中的如何一种可以解决这个问题:
第一套规则:
1. 大瓶子只能倒入中瓶子
2. 中瓶子只能倒入小瓶子
3. 小瓶子只能倒入大瓶子
4. 小瓶子只有在已经装满的情况下才能倒入大瓶子
5. 若小瓶子被倒空,则无论中瓶子是否满,应马上从中瓶子倒入小瓶子
之所以要规定倒酒的顺序是为了防止状态重复。而根据这5条规则,大瓶子每次倒入中瓶子的酒总是8品脱,小瓶子每次倒入大瓶子的酒总是5品脱。(请结合下面的表来理解这句话,理解这点很重要)
有了上面的规定后,倒酒的顺序就确定下来了:
12品脱瓶子 | 8品脱瓶子 | 5品脱瓶子 | |
12 | 0 | 0 | 初始状态 |
4 | 8(倒进) | 0 | |
4 | 3 | 5(倒出) | |
9 | 3 | 0 | |
9 | 0 | 3 | |
1 | 8(倒进) | 3 | |
1 | 6 | 5(倒出) | 搞到6品脱了 |
6 | 6 | 0 | 完成 |
第二套规则:
1. 大瓶子只能倒入小瓶子
2. 小瓶子只能倒入中瓶子
3. 中瓶子只能倒入大瓶子
4. 中瓶子只有在已经装满的情况下才能倒入大瓶子
5. 若中瓶子被倒空,则无论小瓶子是否满,应马上将小瓶子倒入中瓶子
其实只是将第一套规则中的“中”和“小”两个字对换了一下。
根据这个规则确定的倒酒的顺序如下(注意,我将8品脱和5品脱的位置交换了一下):
12品脱瓶子 | 5品脱瓶子 | 8品脱瓶子 | |
12 | 0 | 0 | |
7 | 5(倒进) | 0 | |
7 | 0 | 5 | |
2 | 5(倒进) | 5 | |
2 | 2 | 8(倒出) | |
10 | 2 | 0 | |
10 | 2 | 2 | |
5 | 5(倒进) | 2 | |
5 | 0 | 7 | |
0 | 5(倒进) | 7 | |
0 | 4 | 8(倒出) | |
8 | 4 | 0 | |
8 | 0 | 4 | |
3 | 5(倒进) | 4 | |
3 | 1 | 8(倒出) | |
11 | 1 | 0 | |
11 | 0 | 1 | |
6 | 5(倒进) | 1 | 搞到6品脱了 |
6 | 0 | 6 | 完成 |
二. 原理
设大,中,小三个瓶子容量分别是C1,C2,C3,需要倒出的容量是R
则实际上要是我们能将容量为R的酒倒到中瓶子和小瓶子中就可以啦(有点废话)
设大瓶子倒满中瓶子X次,从小瓶子中倒入大瓶子Y次。
那么显然由大瓶子累次倒入中瓶子和小瓶子总共C2*X的酒。而由小瓶子倒入大瓶子一共有C3*Y的酒。
那么最终,小瓶子和中瓶子剩余的酒显然就是 C2*X - C3*Y
因此,泊松分酒问题实质上转化为下面的不定方程是否有正整数解的问题:
C2*X - C3*Y = R
对于我们的问题,
C1=12,C2=8,C3=5,R=6
第一种倒酒规则实质上相当于解下面这个不定方程:
8X - 5Y = 6 ( 限定 X > 0 ,Y > 0 )
最小整数解是 X=2,Y= 2
表示倒满8品脱的瓶子2次,5品脱的瓶子倒空2次
那么8品脱的瓶子和5品脱的瓶子剩酒总量必然是 8 * 2 – 5 * 2 = 6
第二种倒酒规则实质上相当于解下面的不定方程:
5X - 8Y = 6 ( 限定 X > 0 , Y > 0 )
最小整数解是 X = 6 ,Y= 3
表示倒进5品脱瓶子6次,从8品脱瓶子中倒出3次
那么最终5品脱和8品脱的瓶子剩酒总量必然是 5 * 6 – 8 * 3 = 6
好了,现在你明白为什么要规定倒酒的顺序了吧。小瓶子和中瓶子是一个系统,而大瓶子又是另外一个系统,大瓶子的酒只能倒入中瓶子和小瓶子组成的系统,小瓶子的酒只能倒出到大瓶子的系统。我们关注的是由中瓶子和小瓶子组成的系统,这个系统每次增加都是8品脱(中瓶子容量),每次减少都是5品脱(小瓶子容量)。
另外,如果存在X和Y,使得下面的方程有解:
C2*X - C3*Y = 1
实质上就是说能够倒出1品脱的酒,那么任意品脱的酒都能倒出了。
因为:
(C2*X - C3*Y)*N = N
from:http://www.cnblogs.com/heaad/archive/2010/11/22/1884658.html
相关推荐
泊松分酒源代码,典型的广搜算法解决,很好的学习广搜算法的一般模式求解问题
用有限差分法求解方程,里面有两个文件,其中一个是泊松方程,另外一个是求解其他势能的方程
用有限差分方法计算泊松方程,并用matlab编程
研究了含有孔隙的功能梯度...研究结果表明Lamb波的相速度<br> 色散曲线能够同时反映功能梯度材料的弹性模量、泊松比、密度和孔隙率四个方面的信息,为含有孔隙的功能梯度<br> 材料弹性性质的反演提供了理论依据。<br>
利用matlab对珀松方程作有限差分计算
对于给定的m和k (0<m<2000, 0<= k < 2500),计算其概率,以科学格式输出,保留小数点后6位有效数字。 可以使用数学库函数,误差不超过0.000001。 【输入形式】 输入文件为当前目录下的poisson.in。文件...
一个用于解决二维泊松方程的求解,用有限元中的三角形剖分
利用泊松过程,实现泊松点过程和泊松簇过程
基于泊松过程构造定理,利用R语言来模拟泊松过程 ,并给出泊松过程的检验方法。
我们考虑闭弦在微弱弯曲的背景中运动,并在其完全T对偶化背景中运动。 使用T对偶变换定律,我们发现T对偶空间中的泊松括号结构与原始理论中的基本泊松括号相对应... <mi> R </ mi> </ math>的非几何时空- 通量。
常用材料泊松比,常用材料泊松比,常用材料泊松比
泊松分布的概率密度函数为: P(X=k)=\frac{e^{-\lambda}\lambda^k}{k!} 泊松分布的参数λ是单位时间(或单位面积)内随机事件的平均发生率。泊松分布适合于描述单位时间内随机事件发生的次数。如某一服务设施在一定...
通过matlab实现二维泊松求解,采用构建系数矩阵的形式,对系数矩阵求逆矩阵可获得最终结果。
基于pcl对三维点云进行表面重建,以获取其表面形貌
泊松方程的解法,这是一个一维泊松方程,利用快速傅里叶变换方法解
在一个六边形区域内生成服从泊松过程的一定数量的点
comsol求解泊松方程,对于初学者很重要
基于Python对abaqus二次开发,参数化建立负泊松比模型的程序
用户和基站的泊松分布,可以设置基站的覆盖半径。