我们有很多瓶物色的液体,其中有一瓶是毒药,其他是蒸馏水,试验的小白鼠喝了以后 会在5分钟后死忙,而喝到蒸馏水的小白鼠则一切正常。我们现在有5只小白鼠,请问 一下,我们用这五只小白鼠,5分钟的时间,能够检验多少瓶液体的成分(检验成分是 指确定这瓶液体是蒸馏水还是毒药)?

  • 5瓶

  • 6瓶

  • 31瓶

  • 32瓶




这道题关键的一点是只有一瓶毒药。且有很多瓶,这里取出的瓶子里不能保证一定有一个有毒的

要在5分钟内判断出是否有毒,说明每只老鼠只能喝一杯液体。那么这里一共有5杯液体,每杯液体要么有毒要么没毒,可以表达2个信息量,那么一共可以表达2^5种,即32种情况。

这是大致的判断,接下来就是构造各种液体是否有毒和老鼠死亡之间的映射关系了。

2个信息量,常常让人想到的是二进制,所以可以尝试以下映射:

1) 对液体进行标号,0~ 31号;

2) 取其中一瓶,将其标号转换成二进制表示,如18 = 0x10010, 将液体滴到对应位为1的杯子中,对于18号液体,则将液体滴到5号杯和2号杯中;

3) 第i只老鼠喝第i杯液体;

4)5分钟后,第i只老鼠死亡则将第i位置1,得到的数即是有毒液体的编号。例如第5只老鼠喝第二只老鼠死亡,得到的数为0x10010 = 18, 则为18号液体


编号为0的液体不使用,

因为不能保证这32瓶里一定有一个有毒,则只能辨别31个,

如果保证取出的瓶子里一定有一个有毒的,则可以辨别32个,如果都没死,则0号液体有毒,死了某几个,则可找到有毒的液体编号,0号液体也就是无毒的了。



http://blog.csdn.net/river_like/article/details/21412177  这个解释也很全面。