有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,10只老鼠如何可以24小时测出具体哪一瓶有毒?
思路:
水是有毒和无毒两种状态,可以用2进制0和1表示;老鼠喝水后中毒和没有中毒也是两种状态,也是可以用0和1表示的。10只老鼠可以表示 2的10次方个可能,共1024个。足够测出1000瓶水中具体哪一瓶有毒。
将水瓶按照十进制编号,并转换成2进制;或者直接使用10位2进制编号;并且对老鼠按2进制从左到右依次编号。
二进制表示的水杯编号上位数有1的位置,给相同位数编号为1的老鼠喝水。根据老鼠中毒代码反推出具体水杯。
具体C++实现代码如下:
#include<iostream>
using namespace std;<