首先我们知道最多的情况,就是1000只,让他们同时喝,答案一定能够出来!
最少的,先说答案,10只,因为2的10次方为1024,1024 >1000,所以只需要10只小白鼠即可
为便于理解,将题目简化。现在有8瓶水,其中一瓶有毒,因为2的3次方为8,所以只要3只小白鼠就可以完成。
1.首先我们将8瓶水用二进制编码
图1
2.现在我们把这8瓶水按照编码数字去分组
图2
3.把每一纵列的水取出来一滴然后混合,现在我们有四瓶混合水,但是有三只小白鼠,由于第四位为1的只有1瓶,所以该瓶水不需要喂给任何小白鼠,如果其他3瓶水喂给小白鼠后,未出现死亡,那该瓶水即为有毒水
把第一位为1的给一号小白鼠
把第二位为1的给二号小白鼠
把第三位为1的给三号小白鼠
喝完
现在假设3号小白鼠,死了,另外2只没死
这意味着什么?
意味着第三位为1的瓶子中有一瓶有毒!
嫌疑人有
然而我们知道,另外2只没死,意味着第一位为1,第二位为1都没有毒,
所以排除掉前面3个
真相只有一个!
0100是有毒的!
如果我们对结果,用1代表死,0代表没死
那就是0100
对,小白鼠的存活编号就直接告诉看我们凶手是谁!
原因理解,其实很简单,这相当于是一个在与不在的二元判断
对于第一位为1的水,如果小白鼠死了,证明毒水里面第一位是1
依次类推,i号小白鼠的存亡状态决定了毒水编号二进制的i号是否为1
所以1000瓶水,是2^10次方,我们需要10位去表示,十只小白鼠去检验