有一个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

三个瓶子分酒c语言源码,泊松分酒原理 - 我类个擦的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. 泊松分酒 java课件_泊松分酒原理 - 我类个擦的个人空间 - OSCHINA - 中文开源技术交流社区...

    有一个12品脱(pint)的酒瓶,里面装满葡萄酒,另有8品脱和5品脱的瓶子各一个.问如何从中分出6品脱的酒出来? 传说泊松年轻时成功解决了该问题,勾起了他对数学的兴趣而投身数学研究,因此该问题被称为泊 ...

  2. 在C语言中数据耦合例子,耦合性 内聚加实例 - osc_yip56055的个人空间 - OSCHINA - 中文开源技术交流社区...

    基本信息 耦合性(或称"耦合度") 英文 : coupling 耦合性也叫块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块之间 ...

  3. qt调用c语言编写的dll文件,Qt之调用外部DLL - moki_oschina的个人空间 - OSCHINA - 中文开源技术交流社区...

    预备知识: 1.如果在没有导入库文件(.lib),而只有头文件(.h)与动态链接库(.dll)时,我们才需要显示调用,如果这三个文件都全的话,我们就可以使用简单方便的隐式调用. 2.通常Windows ...

  4. c语言输出法雷序列,法雷(法里)序列 - osc_h0wb1wlt的个人空间 - OSCHINA - 中文开源技术交流社区...

    定义: 对任意给定的一个自然数n,将分母小于等于n的不可约的真分数按升序排列,并且在第一个分数之前加上0/1,在最后一个分数之后加上1/1,这个序列称为n级法雷数列,即法雷数列是0和1之间最简分数升序 ...

  5. 仿射解密c语言程序实验报告,仿射加密解密 - 依姆哣特的个人空间 - OSCHINA - 中文开源技术交流社区...

    //功能:仿射加密 密钥:[3][5][9][11][15][17][19][21][23]有逆元的数 例子:pku  c=7,d=3  输出 :EVN 编辑环境:vc++6.0 include in ...

  6. 蓝桥杯泊松分酒java_蓝桥杯-泊松分酒 - steven_wjg的个人空间 - OSCHINA - 中文开源技术交流社区...

    泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:"泊松分酒& ...

  7. c语言平时作业完成的评价,C语言作业评价标准 - osc_fmg49rzg的个人空间 - OSCHINA - 中文开源技术交流社区...

    C语言作业评价标准 作业内容: 每周作业分为基础作业.挑战作业和预习作业: 基础作业为本周所学内容的巩固: 挑战作业包括但不仅限于所学知识的综合运用: 预习作业为下周所学内容的任务单,要求必须在课前完 ...

  8. android宿舍管理系统源码,校园宿舍管理系统 - ATB的个人空间 - OSCHINA - 中文开源技术交流社区...

    本实例为一个校园宿舍管理系统, 系统用户分为三个角色,系统管理员 , 楼宇管理员, 学生, 系统管理员可以应用对楼宇管理员的管理工作(增删改查), 学生的管理(增删改查), 楼宇管理(增删改查), 学 ...

  9. 双线性插值算法c 语言实现,双线性插值 - CristianoC的个人空间 - OSCHINA - 中文开源技术交流社区...

    前言 最近在学习LBP,其中的圆形LBP特征由于计算的值可能不是整数,即计算出来的点不在图像上,我们要使用计算出来的点的插值点.目的的插值方法有很多,Opencv使用的是双线性插值,今天就来介绍一下双 ...

最新文章

  1. 运维中的MySQL数据库管理方式
  2. tomcat及负载均衡
  3. java null转换jason_Java进阶知识,轻松理解Java泛型
  4. Redis高可用方案-哨兵模式-SpringBoot整合
  5. C# XML 添加,修改,删除Xml节点
  6. 蓝桥杯2015初赛-星系炸弹-日期计算
  7. 微软宣布已获批:重新向华为出口软件!
  8. Javascript 数组循环遍历之forEach
  9. [图解]管理九段的新排列
  10. Ubuntu下Arm-Linux-GCC交叉编译环境的搭建
  11. et文件怎么转成excel_怎么将pdf转成excel?一定要学会这个PDF转Excel方法
  12. LINUX下载编译FreeType
  13. 在Linux系统编译DCMTK的源码得到其动态库文件和可执行程序
  14. ETL设计详解(数据抽取、清洗与转换)
  15. NLTK文本分割器是如何工作的
  16. 系统集成项目管理工程师知识点总结(错题记录)
  17. nginx 配置之 proxy_pass参数详解
  18. 使用Adobe illustrator (AI)快速制作图标
  19. 如何修改android手机电池容量显示信息
  20. 独立开发者+开源项目,超级个体的价值模式

热门文章

  1. java获取项目中的路径_java中几种获取项目路径方式
  2. 和真正的程序员在一起是怎样的体验【转载】
  3. 别再逼三星了,它在起死回生的路上挣扎很久了
  4. 肠道微生物群可以导致自闭、多动、焦虑和抑郁
  5. 记录-安装cuda与cudnn 及对应版本的tensorflow|pytorch
  6. 【前端圭臬】一:写给入坑前端的你
  7. mysql数据库修改信息语句_mysql数据库的增删改语句
  8. coreldraw铺花纹_CorelDRAW简单绘制漂亮的花纹边框技巧介绍
  9. gm不重启服务器修改物品爆率,(搬运) 修改任务物品爆率方法
  10. 分布式事务之Seata TCC