问题:100瓶液体中,99瓶是水,一瓶是无色无味的毒药,现在你有一些小白鼠,让小白鼠喝一点液体,如果第二天小白鼠死了说明是毒药,反之无毒。你有两天时间,问至少需要多少只小白鼠才能找到那一瓶毒药。
解析:
思考:看到这个问题,我有一个疑问,就是这个“两天时间”,我在考虑到底这个时间到底能做几次实验,第一天做第一次实验,第二天才可以有结果,那第二次实验岂不是第三天才能得到结果??有人说一个老鼠就可以,如果老鼠24小时死,那隔半小时喂一瓶,等着看什么时候死不就行了。哈哈,这就是钻牛角尖。所以我们不去纠结这个天数,只看能做几次实验??
一、如果这两天只能做一次实验:
首先答案是7只老鼠就可以,下面我们再来具体说明为什么?
首先7只老鼠A、B、C、D、E、F、G
然后把100个瓶子也用数字表示出来,不过用到二进制数字。
七位二进制表示:
1: 0000001
2: 0000010
......
100: 1100100
然后ABCDEFG分别对应着个七位二进制的列,
老鼠 | A | B | C | D | E | F | G |
第1瓶 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
第2瓶 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
第3瓶 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
第4瓶 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
... | ... | ... | ... | ... | ... | ... | |
第100瓶 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
每只老鼠只负责自己对应这一列的数字,如果是1就喝,0就不喝。。
也就是遇到某一瓶是毒药,那么死的老鼠数量不唯一(有点残忍)。
第二天,老鼠死了就代表对应的这一列的数字是1,没死那就是0,通过7只老鼠的性命就推断出这个唯一的7位二进制数字。
例如1:CDE三只老鼠死了,其他老鼠都活着。
A | B | C | D | E | F | G |
活 | 活 | 死 | 死 | 死 | 活 | 活 |
0 | 0 | 1 | 1 | 1 | 0 | 0 |
他们组成的数字就是0011100,那就是第28瓶是毒药。
例如2:BDEG四只老鼠死了
A | B | C | D | E | F | G |
活 | 死 | 活 | 死 | 死 | 活 | 死 |
0 | 1 | 0 | 1 | 1 | 0 | 1 |
组成的数字为0101101,那就是第45瓶是毒药。
所以,7只老鼠通过一次实验就可以验证出那瓶是毒药。
二、如果这两天只能做两次实验:
和上面一次实验的原理一样,但是5只老鼠就可以,
5只老鼠为ABCDE,
然后100瓶子用5位三进制表示:
第1瓶 | 0 | 0 | 0 | 0 | 1 |
第2瓶 | 0 | 0 | 0 | 0 | 2 |
第3瓶 | 0 | 0 | 0 | 1 | 0 |
第4瓶 | 0 | 0 | 0 | 1 | 1 |
第5瓶 | 0 | 0 | 0 | 1 | 2 |
... | ... | ... | ... | ... | |
第100瓶 | 1 | 0 | 2 | 0 | 1 |
还是5只老鼠对应5列
老鼠 | A | B | C | D | E |
第1瓶 | 0 | 0 | 0 | 0 | 1 |
第2瓶 | 0 | 0 | 0 | 0 | 2 |
第3瓶 | 0 | 0 | 0 | 1 | 0 |
第4瓶 | 0 | 0 | 0 | 1 | 1 |
第5瓶 | 0 | 0 | 0 | 1 | 2 |
... | ... | ... | ... | ... | |
第100瓶 | 1 | 0 | 2 | 0 | 1 |
但是现在喝的方法和之前不一样,遇到1就第一次实验喝,0就不喝,2就第二次实验喝。然后静等结果就可以
后面确认具体数值方法喝之前一样,第一次喝了就死了那对应的数字就是1,一直没死那就是0,第二次喝了死了那就是2.
(有人可能对2就是第二次喝有个疑问,因为后面几列有1有2,如果死一次喝了死了还怎喝第二次,其实这个如果在第一次就死了就直接确认这个位置的数字是1了,就不用管第二次了。)、
例如1:老鼠B在第一天死了,CE两只在第二天死了。
老鼠 | A | B | C | D | E |
生死 | 活 | 第一死 | 第二死 | 活 | 第二死 |
第2瓶 | 0 | 1 | 2 | 0 | 2 |
得到的数字就是01202,换算一下就是47,那就是第47瓶有毒。
多余例子就不举了,原理都是一样,可以试试。