你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

前言:

    我为什么会过来解这道数学题呢?我的脑回路大概是这样的

   读hashmap源码->发现大量位运算->发现这道题也是位运算的典型。

问题:

有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

解释:

该问题与三只老师喝8瓶水问题模型一样,这里用三只吧,方便列举

  首先2的三次方是8(2的10次方式1024),然后正好三只老鼠和8瓶药,我们不妨用二进制的方式来表示

0 0 0  分别表示三只老鼠,那只老鼠死了就表明喝了毒药,将死的哪位置位1,(比如3号老鼠死了就是001)

然后我们在分别吧8瓶药列举出来:

000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7

因为只能进行一次操作,所以我们会把药进行混合

混合方式:

第一位为1的4瓶药进行混合;

第二位为1的4瓶药进行混合;

第三位为1的4瓶药进行混合;

然后让三只老鼠分别喝三瓶药,死的那只哪一位记为1。我们就可以得到一个三位的二进制数

(比如第一只和第三只死掉,我们记为101,通过101可以锁定毒药在第五瓶),就可以明白毒药的位置了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值