题目:现在由8瓶试剂,其中有一瓶有毒,现在用小白鼠来检测出有毒的试剂,小白鼠注射之后一小时之内必死亡,现在需要在一小时之内找出这瓶有毒试剂,问最少需要多少只小白鼠。
分析:这是一个计算机二进制的经典问题,首先从简单一点的入手
1:假设只有2瓶试剂,其中一瓶有毒,那么是不是只需要一只小鼠就能检测出来了,将其中一瓶试剂注射给小鼠,如果小鼠死亡,那么此试剂有毒,反之,则另外一瓶有毒,用表格的形式表示:
试剂 / 小鼠 | 小鼠1 |
试剂1 | 注射 |
试剂2 | 不注射 |
如果小鼠1死亡,那么试剂1有毒;
如果小鼠1不死亡,那么试剂2有毒;
2:假设只有4瓶试剂呢,也按照表格的形式:
试剂 / 小鼠 | 小鼠1 | 小鼠2 |
试剂1 | 不注射 | 不注射 |
试剂2 | 注射 | 不注射 |
试剂3 | 不注射 | 注射 |
试剂4 | 注射 | 注射 |
如果小鼠1,2都不死亡,那么试剂1有毒;
如果小鼠1死亡,小鼠2不死亡,那么试剂2有毒;
如果小鼠1不死亡,小鼠2死亡,那么试剂3有毒;
如果小鼠1,2都死亡,那么试剂4有毒。
3:那么有8瓶试剂呢,也按照表格的形式:
试剂 / 小鼠 | 小鼠1 | 小鼠2 | 小鼠3 |
试剂1 | 不注射 | 不注射 | 不注射 |
试剂2 | 不注射 | 不注射 | 注射 |
试剂3 | 不注射 | 注射 | 不注射 |
试剂4 | 注射 | 不注射 | 不注射 |
试剂5 | 不注射 | 注射 | 注射 |
试剂6 | 注射 | 不注射 | 注射 |
试剂7 | 注射 | 注射 | 不注射 |
试剂8 | 注射 | 注射 | 注射 |
如果小鼠1,2,3都不死亡,那么试剂1有毒;
如果小鼠1,2不死亡,小鼠3死亡,那么试剂2有毒;
如果小鼠1,3不死亡,小鼠2死亡,那么试剂3有毒;
如果小鼠2,3不死亡,小鼠1死亡,那么试剂4有毒;
如果小鼠2,3死亡,小鼠1不死亡,那么试剂5有毒;
如果小鼠1,3死亡,小鼠2不死亡,那么试剂6有毒;
如果小鼠1,2死亡,小鼠3不死亡,那么试剂7有毒;
如果小鼠1,2,3全死亡,那么试剂8有毒。
总结:这就是一个二进制的问题:
2^1 = 2,所以两瓶试剂的话用一只小白鼠就够了;
2^2 = 4,所以4瓶试剂的话需要两只小白鼠;
2^3 =8,所以8瓶试剂的话需要3只小白鼠;
以此类推,16瓶试剂的话需要用4只小白鼠。。。
是不是很有趣呢?