你只有 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可以锁定毒药在第五瓶),就可以明白毒药的位置了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章