假设现在有15个一模一样的瓶子,其中有一个瓶子里面装有毒药,其它的瓶子里面装有水,毒药的颜色和水无法通过肉眼辨别。老鼠只要喝下任意量的毒药就会在24小时内死亡。现在的问题是如果要在24小时判断哪一个瓶子装的是有毒的毒药,最少需要多少只老鼠?
题解:我们首先对这15个瓶子依次编号为
1
−
>
15
1->15
1−>15并求其对应的二进制表示:
- 1: 0001 0001 0001
- 2: 0010 0010 0010
- 3: 0011 0011 0011
- 4: 0100 0100 0100
- 5: 0101 0101 0101
- 6: 0110 0110 0110
- 7: 0111 0111 0111
- 8: 1000 1000 1000
- 9: 1001 1001 1001
- 10: 1010 1010 1010
- 11: 1011 1011 1011
- 12: 1100 1100 1100
- 13: 1101 1101 1101
- 14: 1110 1110 1110
- 15: 1111 1111 1111
这里可以看出4位的二进制数足以表示这15个数,然后我们就选4只老鼠,给第一只老鼠吃二进制编号中第一个二进制位为1的瓶子的毒药,给第二只老鼠吃二进制编号中第二个二进制位为1的瓶子的毒药,给第三只老鼠吃二进制编号中第三个二进制位为1的瓶子的毒药,给第四只老鼠吃二进制编号中第四个二进制位为1的瓶子的毒药。(二进制编号从低位开始且从1开始编号)。按照如上规划每只老鼠对应的瓶子为:
- 1、3、5、7、9、11、13、15
- 2、3、6、7、10、11、14、15
- 4、5、6、7、12、13、14、15
- 8、9、10、11、12、13、14、15
如果那只老鼠死了则有毒的瓶子的二进制编号的该二进制位为1,否则为0。这样我们就求出了有毒的瓶子的编号。这里的情况可以很容易的扩展到多个瓶子的情况,以此类推即可。