摘要
本文从头开始推理了这道经典题目,并简单地与二进制思想做了对比。
正文
偶然间又看到这样一道经典题目——“8瓶酒一瓶有毒,用小鼠测试。每次测试结果8小时后才会得出,而你只有8个小时的时间。问最少需要()人测试? ”
大多数马上就会反应到这就是个典型的10进制转2进制的题。我还好,我也想到这个方向了,但我还是没有想到如何在这个方向上解出来这个题。所以自己试着从头开始推断一下。
起初我是这么想的,既然是要找至少多少只,那先来8只,怎么用?很简单,1只试1瓶,看哪只有反应。
有7只该怎么用?也简单,1~7号小鼠喝1~7号瓶里的水,8号瓶不用,若1~7号小鼠里有反应,也可知有毒的在1~7号瓶里,若无反应,则8号瓶有毒。
有6只该怎么用?可以这么用:
鼠1 | 鼠2 | 鼠3 | 鼠4 | 鼠5 | 鼠6 |
1 | 2 | 3 | 4 | 5 | 6 |
2 | 3 | 4 | 5 | 6 | 7 |
让1号鼠号1、2号瓶,2号鼠喝2、3,...,6号鼠喝6、7号瓶。这样,若1号瓶或7号瓶有毒,则只会出现“鼠1或鼠6分别会有反应”这两种情况;若2号瓶有毒,则只会出现“只有鼠1和鼠2有反应”这一种情况;若3号瓶有毒,则只会出现“只有鼠2和鼠3有反应”这一种情况;...;若6号瓶有毒,则只有鼠5和鼠6会出现反应;若小鼠们都没反应,那就是8号瓶有毒了。
有5只该怎么用?与上同理,如表格所示:
鼠1 | 鼠2 | 鼠3 | 鼠4 | 鼠5 |
1 | 2 | 3 | 4 | 5 |
2 | 3 | 4 | 5 | 6 |
3 | 4 | 5 | 6 | 7 |
让1号鼠号1、2、3号瓶,2号鼠喝2、3、4,...,5号鼠喝5、6、7号瓶。这样,若1号瓶或7号瓶有毒,则只会出现“鼠1或鼠5分别会有反应”这两种情况;若2号瓶有毒,则只会出现“只有鼠1和鼠2有反应”这一种情况;若3号瓶有毒,则只会出现“只有鼠1、鼠2和鼠3有反应”这一种情况;若4号瓶有毒,则只会出现“只有鼠2、鼠3和鼠4有反应”这一种情况;若5号瓶有毒,则只会出现“只有鼠3、鼠4和鼠5有反应”这一种情况;若6号瓶有毒,则只会出现“只有鼠4和鼠5有反应”这一种情况;若小鼠们都没反应,那就是8号瓶有毒了。
有4只该怎么用?与上同理,如表格所示:
鼠1 | 鼠2 | 鼠3 | 鼠4 |
1 | 2 | 3 | 4 |
2 | 3 | 4 | 5 |
3 | 4 | 5 | 6 |
4 | 5 | 6 | 7 |
让1号鼠号1、2、3、4号瓶,2号鼠喝2、3、4、5,...,4号鼠喝4、5、6、7号瓶。这样,若1号瓶或7号瓶有毒,则只会出现“鼠1或鼠4分别会有反应”这两种情况;若2号瓶有毒,则只会出现“只有鼠1和鼠2有反应”这一种情况;若3号瓶有毒,则只会出现“只有鼠1、鼠2和鼠3有反应”这一种情况;若4号瓶有毒,则只会出现“鼠1、鼠2、鼠3和鼠4有反应”这一种情况;若5号瓶有毒,则只会出现“只有鼠2、鼠3和鼠4有反应”这一种情况;若6号瓶有毒,则只会出现“只有鼠3和鼠4有反应”这一种情况;若小鼠们都没反应,那就是8号瓶有毒了。
有3只小鼠呢?从这里开始我犯了个错误,先按下不说,等分析完了再看到底错在哪里。与上同理,如表格所示:
鼠1 | 鼠2 | 鼠3 |
1 | 2 | 3 |
2 | 3 | 4 |
3 | 4 | 5 |
4 | 5 | 6 |
5 | 6 | 7 |
仔细观察会发现,当3号、4号、5号瓶有毒时,都会出现“鼠1、鼠2和鼠3都会有反应”这种情况,失去了唯一表示的原则,所以3只小鼠是不够的,至少需要4只。
我错在哪里了呢?我错在了思维发生了惯性,简单地让每只小鼠增加喝的瓶数,而没有认识到“每个瓶要有情况对其唯一表示”这一原则。返回来再看3只小鼠的情况,我可以这么用:
鼠1 | 鼠2 | 鼠3 |
1 | 2 | 3 |
4 | 4 | |
5 | 5 | |
6 | 6 | |
7 | 7 | 7 |
我突然发现,我在想到这种方法时,是利用了逆向思维,即若X号瓶有毒,我怎么来表示。
若1号瓶有毒,则我只用1号鼠做反应,即让1号鼠喝1号瓶;
若2号瓶有毒,则我只用2号鼠做反应,即让2号鼠喝2号瓶;
若3号瓶有毒,则我只用3号鼠做反应,即让3号鼠喝3号瓶;
若4号瓶有毒,则我用鼠1和鼠2做反应,即让鼠1和鼠2喝4号瓶;
若5号瓶有毒,则我用鼠1和鼠3做反应,即让鼠1和鼠3喝5号瓶;
若6号瓶有毒,则我用鼠2和鼠3做反应,即让鼠2和鼠3喝6号瓶;
若7号瓶有毒,则我用鼠1、鼠2和鼠3做反应,即让鼠1、鼠2和鼠3喝7号瓶;
若8号瓶有毒,我不用小鼠做反应,即小鼠们都不喝8号瓶。
这样就出现了如表格所示的情况,鼠1喝了1、4、5、7;鼠2喝了2、4、6、7;鼠3喝了3、5、6、7。
直接用二进制的思想来做的话,是这样,编号瓶为0、1、2、3、4、5、6、7;鼠为a、b、c。
鼠a | 鼠b | 鼠c | 瓶 |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
0表示没喝,1表示喝了。这样也可以对各个瓶的情况做唯一的表示。
总结
这两种方法有什么相同和不同之处呢?相同之处在于二者都是利用了“各个瓶的情况唯一表示”这一原则,不同之处在于具体的表示方法,后者是前者的规范化、标准化后的成果。前人之学也是这么不断的摸索出来的吗?深需我辈努力学习啊。