有 30 瓶水,其中一个瓶子是有毒的,毒性在 n 分钟发作,最少用多少只白鼠可以一次找出那瓶毒水,判断和操作时间不能超过 n 分钟。
30 瓶水,从 0 到 29 编号。
2 只白鼠的话可以有 4 种状态:
……
00000 0 00001 1 00010 2 00011 3 00100 4 00101 5 00110 6 00111 7 01000 8 01001 9 01010 10 01011 11 01100 12 01101 13 01110 14 01111 15 10000 16 10001 17 10010 18 10011 19 10100 20 10101 21 10110 22 10111 23 11000 24 11001 25 11010 26 11011 27 11100 28 11101 29
最后观察所有白鼠的状态,对应它们的位置,如果死掉了,就把对应位置标记为 1,如果活着,就是 0。这个 2 进制对应的 10 进制数就是那瓶有毒的水。
因为前题是只有一瓶有毒,所以如果都活着就是 0 号瓶有毒。
如果有多瓶水有毒,就不对瓶子做 0 号编号(因为没有老鼠喝这个瓶子中的水,在其它瓶子有毒的情况下无法判断这个瓶子有没有毒),还用上面的方法可以找出所有有毒的瓶子。