有趣问题——倒水问题

/   智力题   /

 

 

有两个容桶,

小桶的容量是4升,

大桶的容量是9升,

怎样才能从河中恰好打上6升水呢?

 
/   过渡   /

 

 

 

  

 

 

/   答案   /

 

 

问题分析

刚拿到这个问题,我们可能互相倒来倒去,试了好久都没成功,但也许我们偶尔能成功,但是如果容器的容量又变了呢,或者要取的容量变了,我们是否可以从这类问题中寻找出一个规律,这才是解题的关键。

 

方法1:规约法

 

    首先说下规约法:

    问题规约法是一种基于状态空间的问题描述与求解方法。

    它是已知问题的描述,通过一系列变换把此问题变为一个子问题集合,这些子问题的解可以直接得到(本原问题),从而解决了初始问题的一种算法。

            

    基于以上理论,目前我们还不知道怎样去量出恰好6升,但我们是否能测量其他某个东西?

 

    让我们采用假设倒推法:小桶不可能装得下6升水,所以只能是大桶装

    设想一:在我们面前,大桶中正好有6升水,而小桶正好是满的。(可以转化为大桶满,小桶1)

    设想二:在我们面前,大桶中正好有6升水,而小桶空空如也。(可以转化为大桶2,小桶满)

 

 

    说说设想一,怎么可以达到6升水,在大桶是满的情况下,只要我们能够正好倒掉3升。而为了做到这点,我们必须在小桶中正好有1升水!

    我们接着拆解问题,小桶有1升水也可以转化为大桶有1升水,而后大桶倒到小桶里。怎么能让大桶剩1升水呢?

    我们已经遇见过类似的情况,即我们把大桶装满水,然后倒出4升给小桶,再由小桶倒入河中,这样接连两次,是不是就得到1升水了。

    

    操作步骤:

    大桶装满,然后倒出4升给小桶,再由小桶倒入河中,这样接连干两次,得到1升水,接着将1升水导入小桶

    大桶再次装满,向小桶倒水,将小桶灌满(即倒出3升),剩下大桶就是6升水

 

 

 

 

方法2:穷举法

 

           其基本思想是:将小桶灌满后,将其中的水全部倒入大桶,如果在倒入大桶的过程中大桶满了,则将大桶倒空,继续将小桶中的水全部倒入大桶。持续这一操作直到大桶中水的体积等于目标体积为止。(也可以从大桶向小桶中倒水,原理是一样的)

          其数学计算过程为用小桶容量的倍数对大桶的容量进行取余:

          4 % 9 = 4

          8 % 9 = 8

          12 % 9 = 3

          16 % 9 = 7

          20 % 9 = 2

          24 % 9 = 6

          成功得到6升水。

 

 

 

/   总结   /

 

 

要注意像用2升的桶和4升的桶得到3升水这种不可解的情况,这种不可解情况在用上面的方法进行计算时会得到循环数列。

          

其根本原因是两个桶容量的大于1的最大公约数无法被目标体积所整除,如6升的桶和9升的桶无法得到2升水,因为6和9的最大公约数3无法被2整除。

 

 

 

 

 

 

所以,上面问题的答案你猜对了吗

 

 

 

 

 

往期推荐:

如何入门做软件开发

为什么我不推荐入行程序员

做全栈开发很难吗

关注我的公众号,学习技术或投稿

长按上图,识别图中二维码即可关注

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值