首页 > 试题广场 >

8瓶水中1瓶有毒,用动物测试。毒发症状在喝水2小时后开始出现

[填空题]
8瓶水中1瓶有毒,用动物测试。毒发症状在喝水2小时后开始出现,而你也只有2个小时的时间,则最少需要用1只动物测试
这是个使用二分法搜索的问题!
8/2=4:确定查找的数在8个数中的前四个或者后四个范围内
4/2=2:确定查找的数在4个数中前两个或者后两个范围内
2/2=1:找到要查找的数
总共搜索3次。
编辑于 2018-01-06 13:25:13 回复(1)

题目中明确说明:毒发症状在两个小时之后才会出现,而我们只有两个小时的时间。因此我们必须一次实验直接出结果。可以直接排除二分法(实验员没有那么多时间来等结果)
正确解法如下:
根据2^3=8,所以3只老鼠可以确定8个瓶子具体哪个瓶子有毒。原理如下:
000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7
一位表示一只老鼠的编号,0-7表示8个瓶子。

也就是分别将1、3、5、7号瓶子的药混起来给老鼠1吃;

2、3、6、7号瓶子的药混起来给老鼠2吃;

4、5、6、7号瓶子的药混起来给老鼠3吃;

哪只老鼠死了,相应的位标为1。

举个例子:

如老鼠1死了、老鼠2没死、老鼠3死了,那么就是 101=5 号瓶子有毒。

编辑于 2018-01-09 16:19:08 回复(9)
思路:
可以把八瓶水分成两堆,让一只老鼠在其中一堆里喝水,如果死了,毒药就在这堆里,反之就在另一堆里,然后把有毒的那一堆在分成两堆,让第二只老鼠在其中一堆里喝若死则毒药在喝的这堆里,在分一堆,在让第三只老鼠喝就能知道毒药在几号里了。
发表于 2018-01-10 10:46:38 回复(4)
        看了答案是3,才推出来解法,一共三只老鼠,而一只老鼠恰好有2种状态,死和活,总共的确是8种排列组合,也就是要每种排列组合都可以直接指明毒药所在的瓶子编号(因为实验结果只会是八种排列组合中的一种,这是唯一信息。)然后就是确定怎样分水给老鼠,以第一瓶为例,假设我们把000(三只老鼠都活着)作为这个瓶子中有毒药的结果,那么三只老鼠都没喝到毒药意味着三只老鼠都没喝1.第二瓶,001,意味着只有第三只喝了2.第三瓶,010,意味着只有第二只喝了3.以此类推。每种独特的实验结果都对应着某一瓶水中有毒药,由于一共恰好有8种不同的结果,刚好对应8种可能的情况。
        当然,题目既然问的是最少,那用四只老鼠一样可以完成,并且所用的水更少了,因为可以不用把第8瓶分给三只老鼠以对应111这个结果,可以只把第8瓶分给第四只老鼠就可以完成实验。如果有更多的老鼠那么就可以节省更多的水,但因为最多只有一瓶可以不被喝就完成验证,当我们至少有7只老鼠的时候每只喝一口水就可以完成实验。
发表于 2020-08-18 17:53:13 回复(1)
赞同cherryljr
{1、3、5、7}号瓶子的最后一位均为1;
{2、3、6、7}号瓶子的中间一位均为1;
{4、5、6、7}号瓶子的第一位均为1;
然后根据老鼠{123}的状况和瓶子集合的交集,确定哪个瓶子的水有毒。
编辑于 2018-02-25 15:58:37 回复(0)