前言:
我为什么会过来解这道数学题呢?我的脑回路大概是这样的
读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可以锁定毒药在第五瓶),就可以明白毒药的位置了