1. 前言
问:有10瓶药水,但是其中有一瓶是有毒的,小白鼠只要喝了任意剂量的药水,24小时内就会死掉。请问,要在24小时内找出有毒的药水,最少需要多少只小白鼠?
答:2^4 = 16 > 10,最少需要4只小白鼠。
问:哪瓶药水有毒呢?
答:见如下过程~
问:一千瓶药水呢,一万瓶药水呢?
答:......见“实现源码”
2. 药水瓶子编号
序号 | 药水瓶子编号 | 对应十进制值 |
1 | 0b0001 | 1 |
2 | 0b0010 | 2 |
3 | 0b0011 | 3 |
4 | 0b0100 | 4 |
5 | 0b0101 | 5 |
6 | 0b0110 | 6 |
7 | 0b0111 | 7 |
8 | 0b1000 | 8 |
9 | 0b1001 | 9 |
10 | 0b1010 | 10 |
3. 混合液瓶子编号
混合液瓶子个数由“药水瓶子编号”二进制位数决定,如上表,二进制数最高为4位,则共需要4个混合液瓶子,对这4个瓶子进行编号,如下表所示。
序号 | 混合液瓶子编号 | 对应十进制值 |
1 | 0b0001 | 1 |
2 | 0b0010 | 2 |
3 | 0b0100 | 4 |
4 | 0b1000 | 8 |
4. 制作混合液
混合液制作规则:药水编号和混合液瓶子编号进行位与运算ÿ