`
美丽的小岛
  • 浏览: 310791 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

泊松分酒趣题<转>

 
阅读更多

有一个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 完成
 
好了试试用这两种规则之一解决如下分酒问题吧:
大瓶子容量10,中瓶子容量7,小瓶子容量3,要分出来5
 
 

二.  原理

 

设大,中,小三个瓶子容量分别是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

分享到:
评论
1 楼 美丽的小岛 2013-03-24  
很喜欢这样分析问题的思路。。

相关推荐

    泊松分酒 c语言实现

    泊松分酒源代码,典型的广搜算法解决,很好的学习广搜算法的一般模式求解问题

    C++生成随机数

    std::uniform_real_distribution&lt;&gt; dis_float(0.0, 1.0); // 生成0到1之间的随机浮点数 double random_float = dis_float(gen); std::cout &lt;&lt; "Random Float: " &lt;&lt; random_float &lt;&lt; std::endl; return 0; }...

    泊松随机数产生

    3. **编程实现**:首先,需要包含必要的头文件,如`&lt;iostream&gt;`、`&lt;cstdlib&gt;`、`&lt;ctime&gt;`等。然后,定义一个函数,输入参数为λ,返回一个泊松随机数。在函数内部,可以使用循环和条件判断来实现舍伍德算法。同时,...

    C++随机数的介绍及使用

    `&lt;random&gt;` 库提供了多种分布,例如 `std::normal_distribution&lt;&gt;` 用于生成正态分布的随机数,`std::poisson_distribution&lt;&gt;` 用于生成泊松分布的随机数等。只需更换或组合不同的分布,即可满足各种随机数生成需求...

    泊松方程差分求解

    ### 泊松方程差分求解 #### 引言 在半导体器件模拟领域,解决静电场问题通常涉及泊松方程的求解。当给定特定的电荷分布及边界条件时,需要求解泊松方程来获得电势分布。泊松方程在二维以上的情形下往往没有解析解...

    用有限差分法求解泊松方程.zip_Poisson方程差分_差分泊松方程_差分法_有限差分法_求解泊松方程

    用有限差分法求解方程,里面有两个文件,其中一个是泊松方程,另外一个是求解其他势能的方程

    随机数程序 VC++实现

    在VC++中,我们可以使用标准库 `&lt;cstdlib&gt;` 和 `&lt;ctime&gt;` 来生成随机数。`&lt;cstdlib&gt;` 提供了 `rand()` 函数,它返回一个介于0到RAND_MAX之间的伪随机数。`&lt;ctime&gt;` 则包含 `srand()` 函数,用于设置随机数生成器的...

    泊松重建_泊松重建_形貌_pcl泊松重构_

    3. **创建泊松重建对象**:使用`pcl::Poisson&lt;pcl::PointXYZ&gt;::Ptr`创建一个泊松重建对象,并设置相应的参数,如深度(决定了重建的细节程度,深度越大,模型越精细但计算量也越大)。 4. **执行泊松重建**:调用`...

    NGenerics算法库

    此外,它还提供了一些更专业化的数据结构,如`Graph&lt;T&gt;`用于图形处理,`Set&lt;T&gt;`和`MultiSet&lt;T&gt;`用于集合操作,以及`PriorityQueue&lt;T&gt;`用于优先级队列操作。 2. **排序和比较**:库内包含了多种排序算法,例如快速...

    12.13_泊松变换_

    C++标准库提供了`&lt;chrono&gt;`头文件,可以用来处理日期和时间,并进行加减运算。 "进制转换"是编程基础的一部分,包括二进制、八进制、十进制和十六进制之间的转换。C++提供了一些内置函数,如`std::oct`、`std::dec`...

    泊松分布 c++ 模拟

    在C++中,可以使用标准库中的`&lt;random&gt;`头文件来生成指数分布的随机数。 2. **累加指数分布的随机数**:对生成的一系列指数分布随机数进行累加,直到累加值超过1,这对应于泊松过程中的一个事件。 3. **确定事件...

    Poisson方程 - 副本_泊松_泊松方程Matlab有限差分_泊松方程_计算泊松方程_差分泊松方程_

    在本资料中,我们将深入探讨如何利用Matlab的有限差分方法来求解泊松方程。 泊松方程通常写作: ∇²u = f 其中,u是未知函数,f是已知源项,∇²是拉普拉斯算子,表示空间中某个区域内的二阶偏导数之和。泊松方程...

    Lamb波在含孔隙功能梯度材料中传播特性的研究

    研究了含有孔隙的功能梯度...研究结果表明Lamb波的相速度&lt;br&gt; 色散曲线能够同时反映功能梯度材料的弹性模量、泊松比、密度和孔隙率四个方面的信息,为含有孔隙的功能梯度&lt;br&gt; 材料弹性性质的反演提供了理论依据。&lt;br&gt;

    程序.zip_matlab_泊松点过程_生成泊松过程

    泊松点过程是一种随机几何对象,它在统计物理学、地理信息系统、无线通信网络等领域有着广泛的应用。在MATLAB中,我们可以利用编程技巧来模拟和生成泊松点过程。本项目"程序.zip_matlab_泊松点过程_生成泊松过程...

    有限元分析

    然后,通过体单元SOLID45对机翼进行三维扩展,这是在Z方向上使用&lt;EXTOPT&gt;&lt;VEXT&gt;命令完成的。SOLID45单元是一个八节点的三维实体单元,适合模拟复杂形状的结构。设置体单元是为了更准确地模拟机翼内部的应力和应变...

    c/c++随机数生成

    cout &lt;&lt; i &lt;&lt; ": " &lt;&lt; setw(6) &lt;&lt; setiosflags(ios::fixed) &lt;&lt; setprecision(2) &lt;&lt; double(a[i]) / Gen_max * 100 &lt;&lt; "%" &lt;&lt; endl; } return 0; } ``` 此示例程序通过生成大量的随机数,并统计每个数字出现的...

    常用材料泊松比

    而复合材料的泊松比则可能因组分材料和结构的不同而有较大变化,一般在0.2至0.4之间。 在工程设计中,泊松比是一个非常关键的材料属性,因为它直接影响着材料的弹性模量、剪切模量以及材料在复杂应力状态下的行为。...

    二维泊松_泊松方程_poisson_二维泊松_

    二维泊松方程是偏微分方程领域中一个重要的基本方程,广泛应用于电磁学、流体力学、热传导、量子力学等多个物理领域。它描述了在一个区域内,某个物理量(如电势、温度或密度)的梯度与该物理量的负二阶导数之间的...

Global site tag (gtag.js) - Google Analytics