智力题之【老鼠吃毒药问题】

  • 毒药问题:

大家应该都听说过这个老题目:有 1000 个一模一样的瓶子,有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

    这个问题的答案也堪称经典:把瓶子从 0 到 999 依次编号,然后全部转换为 10 位二进制数。让第一只老鼠喝掉所有二进制数右起第一位是 1 的瓶子,让第二只老鼠喝掉所有二进制数右起第二位是 1 的瓶子,等等。一星期后,如果第一只老鼠死了,就知道毒药瓶子的二进制编号中,右起第一位是 1 ;如果第二只老鼠没死,就知道毒药瓶子的二进制编号中,右起第二位是 0 ⋯⋯每只老鼠的死活都能确定出 10 位二进制数的其中一位,由此便可知道毒药瓶子的编号了。

 

示意图:

假设有8个瓶子,里面只有一瓶是毒药,外观与其他7瓶一致,老鼠吃下毒药后1个小时会死亡,问要多少只老鼠才能够才一个小时内找出哪一瓶是毒药?具体怎么操作?

一只老鼠有两种状态:1.生存、2.死亡

2^3 = 8,所以用3只老鼠就可以

具体怎么操作呢?

Step1:首先用0-7把8个瓶子编号,然后把10进制的编号转换为二进制数

 

 

 

Setp2:把三只老鼠分别编号为1、2、3,编号为1的老鼠吃上二进制位第一位为1的编号的毒药,编号为2的老鼠就吃上二进制位第二位为1的毒药,编号为3的老鼠就吃上二进制位第三位为1的毒药,然后毒药分配就如下

 

 

编号1老鼠(1-3-5-7)、编号2老鼠(2-3-6-7),编号3老鼠(4-5-6-7)

 

!假设编号为5(101)的瓶子有毒

下面分析结果:

如果1号老鼠死了(老鼠1),则表明毒药存在于编号二进制中第一位为1的瓶子,那么毒瓶子的编号为(XX1),X表示尚未确认

然后分析第二只老鼠,如果第二只老鼠(老鼠2)没死,那就说明毒药瓶子不存在于编号二进制中第二位为1的瓶子,即毒药编号为(X01)

最后分析第三只老鼠,如果老鼠3死了,那就表名毒药存在于编号二进制位中第三位为1的的瓶子之中,即编号为(101)

最后得出结论:编号为101的瓶子有毒

 

假如三只老鼠都没有死亡,则表明有毒的瓶子是0号瓶子

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值