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

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

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

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

  2. java实现gdal栅格矢量化_gdal栅格矢量化 - osc_lfs4vsih的个人空间 - OSCHINA - 中文开源技术交流社区...

    #include "gdal_alg.h" 栅格矢量化功能用于将栅格数据生成矢量数据,通常用于分类图像.GDAL库中使用函数GDALPolygonize()或者函数GDALFPol ...

  3. java进程老挂掉_JAVA进程突然挂掉 - 1024菜bird的个人空间 - OSCHINA - 中文开源技术交流社区...

    JVM内存不足导致进程死掉. Native memory allocation (mmap) failed to map 一台服务器上部署很多JAVA进程已经是微服务的常态,但也有些坑. 背景,测试服 ...

  4. java亲密数的解题思路,算法解题思路总结 - jjhgx的个人空间 - OSCHINA - 中文开源技术交流社区...

    算法解题思路: 细读算法要求 找到极限情况 找到临界情况,结果依赖 找到最终的结束求解点 编程实现:考虑算法的空间复杂度和时间复杂度 案例说明: 假设: 输入字符串为:s, 长度为:slen, s的第 ...

  5. java 树的层次遍历_Java遍历树的层级 - osc_jegm3yg5的个人空间 - OSCHINA - 中文开源技术交流社区...

    非科班出身,欢迎指正. 要实现的逻辑是,在一棵树中,给出任意一个节点,获取到该节点下的N个层级. 一.树型结构 下图的树中,节点上的字母代表节点的名字,字母下的代表该节点的下单金额. 二.数据准备 组 ...

  6. java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java代码的回调函数经常由框架或是系统定义,由程序开发人员填充. 它的最主要特点是即定义了调用的规范同时又非常的灵活. 回调函数有些类似于观察者模式,它们的区别在于:观察者模式返回的参数为Event ...

  7. java构造函数重载继承_Java基础-继承 - 写代码换盆的个人空间 - OSCHINA - 中文开源技术交流社区...

    访问权限 Java 中有三个访问权限修饰符:private.protected 以及 public,如果不加访问修饰符,表示包级可见. 可以对类或类中的成员(字段和方法)加上访问修饰符. 类可见表示其 ...

  8. 在单链表写入一组数据代码_第5章 第1节 链表 - osc_x8s7voop的个人空间 - OSCHINA - 中文开源技术交流社区...

    ● 请你说出几种基本的数据结构, 参考回答: 常见的基本的数据结构有链表.栈.队列.树(只列出面试常考的基本数据结构) 1.链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链 ...

  9. java sql报错不能catch_java异常(转) - osc_ioa3fr1w的个人空间 - OSCHINA - 中文开源技术交流社区...

    Throwable(所有error和exception的父类:超类) Java将错误变成对象交给异常处理机制 Error(仅靠程序本身无法恢复的严重错误) 一般是环境的问题,JVM的问题,并非程序的问 ...

最新文章

  1. Shell命令-文件及内容处理之more、less
  2. 一文带你学会国产加密算法SM4的vue实现方案
  3. dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
  4. java高级工程师开放面试题集一
  5. Openlayers中设置定时绘制和清理直线图层
  6. Java本地文件操作
  7. 复现nature communication PCA原图|代码分析(一)
  8. SpringBoot2 Redis连接池
  9. boot jndi数据源 spring_使用Spring Boot配置JNDI数据源 -Roy教程
  10. 接口测试——接口测试流程
  11. 机器学习笔记(1)决策树
  12. 马哥Linux培训第二周课程作业
  13. 关于小凡模拟器设置完后找不到所要配置文件的问题
  14. cpu烤机温度测试软件,ATX2.0与ATX3.0机箱烤机温度对比测试,竖装显卡真的会把风挡死...
  15. 各层电子数排布规则_电子式排布规律
  16. CSS盒子模型居中方法,高级面试题+解析
  17. Ubuntu下Linux常用命令练习作业题(1)
  18. php cmyk图片,php – 使用Imagick将图像从RGB转换为CMYK
  19. mybatis和mybatis-plus集成springboot的配置区别
  20. Chrome浏览器ERR_INVALID_SIGNED_EXCHANGE解决方案

热门文章

  1. 9个元素换6次达到排序序列_C语言必学的12个排序算法:希尔排序(第3篇)
  2. pytorch 图像分割的交并比_Segmentation101系列-最简单的卷积网络语义分割(1)-PASCAL VOC图像分割...
  3. html文段源码,HTML 段落
  4. 计算机基础.doc,大学生计算机基础.doc
  5. sql 时间 没有日期_SQL-补充:日期和时间戳互转
  6. 机器学习 导论_机器学习导论
  7. scala 字符串转换数组_如何在Scala中将十六进制字符串转换为字节数组?
  8. 面试官:谈谈数据库连接池的原理
  9. 带你玩转七牛云存储——高级篇
  10. 你必须知道的session与cookie