美文网首页PHP程序猿
三个水桶等分8升水的问题 -《算法的乐趣》

三个水桶等分8升水的问题 -《算法的乐趣》

作者: 新亮笔记 | 来源:发表于2019-02-18 09:41 被阅读1次

智力题目

有三个容积分别为3升、5升、8升的水桶,其中容积为8升的水桶中装满了水,容积为3升和容积为5升的水桶都是空的。三个水桶都没有刻度,现在需要将大水桶中的8升水等分成两份,每份都是4升水,附加条件是只能这三个水桶,不能借助其他辅助容器。

“恩,是的,这是一个很经典的问题。”

“然而,我们并不能想全,不信请继续往下看。”

答案

”废话不多说,直接看方法吧。“

第一种(7步)

  1. 将8L的水桶中的水,倒满5L的水桶,这时:8L水桶为3L、5L水桶为5L、3L水桶为0L
  2. 将5L的水桶中的水,倒满3L的水桶,这时:8L水桶为3L、5L水桶为2L、3L水桶为3L
  3. 将3L的水桶中的水,倒入8L的水桶,这时:8L水桶为6L、5L水桶为2L、3L水桶为0L
  4. 将5L的水桶中的水,倒入3L的水桶,这时:8L水桶为6L、5L水桶为0L、3L水桶为2L
  5. 将8L的水桶中的水,倒入5L的水桶,这时:8L水桶为1L、5L水桶为5L、3L水桶为2L
  6. 将5L的水桶中的水,倒满3L的水桶,这时:8L水桶为1L、5L水桶为4L、3L水桶为3L
  7. 将3L的水桶中的水,倒入8L的水桶,这时:8L水桶为4L、5L水桶为4L、3L水桶为0L

第二种(8步)

  1. 将8L的水桶中的水,倒满3L的水桶,这时:8L水桶为5L、5L水桶为0L、3L水桶为3L
  2. 将3L的水桶中的水,倒入5L的水桶,这时:8L水桶为5L、5L水桶为3L、3L水桶为0L
  3. 将8L的水桶中的水,倒满3L的水桶,这时:8L水桶为2L、5L水桶为3L、3L水桶为3L
  4. 将3L的水桶中的水,倒满5L的水桶,这时:8L水桶为2L、5L水桶为5L、3L水桶为1L
  5. 将5L的水桶中的水,倒入8L的水桶,这时:8L水桶为7L、5L水桶为0L、3L水桶为1L
  6. 将3L的水桶中的水,倒入5L的水桶,这时:8L水桶为7L、5L水桶为1L、3L水桶为0L
  7. 将8L的水桶中的水,倒满3L的水桶,这时:8L水桶为4L、5L水桶为1L、3L水桶为3L
  8. 将3L的水桶中的水,倒入5L的水桶,这时:8L水桶为4L、5L水桶为4L、3L水桶为0L

我相信答案肯定不止两个,到底有多少种答案?

带着这个疑问,我们来设计一个算法吧。

问题分析

人的思维

解决这个问题的关键是怎么通过倒水凑出确定的1升水或能容纳1升水的空间。

例如,当8L水桶或5L水桶或3L水桶有1L水时,都能快速倒出4L水。

计算机思维

“穷举法”

水桶初始状态:8L水桶装满水,3L和5L的水桶为空。
水桶最终状态:3L水桶为空,5L和8L的水桶各4L水。

假设将每个状态下三个水桶中的水的体积作为status。

status = array(8,0,0) 得到status = array(4,4,0)。

当然还会有一些限制:

1.各个水桶的都有最大值:

0 <= status[0] <= 8;

0 <= status[1] <= 5;

0 <= status[2] <= 3;

2.当前倒水之后各个水桶的状态,与历史倒水之后各个水桶的状态,不能相同。

3.当前水桶为空时,不能倒给其他水桶。

4.当前水桶为最大容积时,其他水桶不能再向这个水桶倒水。

程序代码(PHP)

运行结果

一共有 16 种倒水方法,方法如下:

...

(16种方法,贴上去太长了,大家在本地尝试下,如需要源码,请关注公众号进行留言。)

小结

运行代码之后,一共找到了 16 种倒水的方法,最快的方法需要 7 个步骤。

“怎么样,是不是没想到会有这么多方法吧,去考考你身边的小伙伴吧。”

本文欢迎转发,转发请注明作者和出处,谢谢!

相关文章

  • 三个水桶等分8升水问题python实现--穷举、简单状态转移与递

    最近在看算法的乐趣,其中有个很简单的三个水桶等分8升水的问题。 题目:有三个容积分别是3升、5升、8升的水桶,其中...

  • 三个水桶等分8升水的问题 -《算法的乐趣》

    智力题目 有三个容积分别为3升、5升、8升的水桶,其中容积为8升的水桶中装满了水,容积为3升和容积为5升的水桶都是...

  • 水桶倒几升水的问题

    简单版:有无限的水,现在给你两个水桶,一个3L,一个5L,问怎么可以获得4L的水?(装到水桶里,而且不可以用什么标...

  • 社招一年:算法面经

    美团算法面经(搜索算法) 一面 逻辑题:8 5 3升的桶 8升水, 分成两个4升比较简单的逻辑题,也有通用题目 L...

  • 区块链中的一致性算法

    一致性问题是区块链等分布式系统中的关键问题,现在常用的一些算法有Paxos,拜占庭,PoW,PoS,DPoS等。这...

  • 数据结构与算法——基础篇(一)

    前置问题 经典问题与算法 8皇后问题(92种摆法)——回溯算法 字符串匹配问题——KMP算法(取代暴力匹配) 汉诺...

  • 三个水桶的故事

    有位木匠,砍了一树, 把它做了三个木桶。 一个装粪,就叫粪桶,众人躲着; 一个装水,就叫水桶,众人用着; 一个装酒...

  • 三个水桶

    有位木匠,砍了一树, 把它做了三个木桶。 一个装粪,就叫粪桶,众人躲着; 一个装水,就叫水桶,众人用着; 一个装酒...

  • 棋盘覆盖(递归)

    原创 棋盘覆盖问题 算法设计思想: 因为棋盘大小是大小,所以可以进行四等分,即分成左上,右上,左下,右下四个区,而...

  • 阿里 数组四等分问题

    数组四等分问题

网友评论

    本文标题:三个水桶等分8升水的问题 -《算法的乐趣》

    本文链接:https://www.haomeiwen.com/subject/uiboeqtx.html