首页 > 试题广场 >

1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,

[单选题]
1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?
  • 8
  • 10
  • 32
  • 999
推荐
1000个瓶子编号1-1000, 每个编号会有一个10位的二进制数字。 10只老鼠,依次喝掉所有二进制第一位是1的瓶子,第二位是1的瓶子。。。第十位是1的瓶子。 一周之后,死掉的老鼠说明毒药瓶子编号在对应二进制位置是1,否则是0。可以组合出毒药的编号。
编辑于 2014-12-30 20:16:33 回复(15)
根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。具体实现跟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号瓶子有毒。
同样道理10个老鼠可以确定1000个瓶子
发表于 2016-03-08 21:37:02 回复(4)
方法(1)
1,把1000瓶标号:1,2,3,4,5,6...1000.
2,所有老鼠排列在一起组成一个2进制队列: 0000000000
0代表不喝,1代表喝
3,0000000001代表第一瓶水被喝情况
0000000010代表第二瓶水被喝情况
0000000011代表第三瓶水被喝情况
0000000100代表第四瓶水被喝情况
...
1111101000代表第1000瓶水被喝情况
4,第7天,喝了毒药的老鼠都死了,那个二进制队列转为为十进制就是毒药的标号。
比如第3只老鼠死亡,其他老鼠没死,队列为0000000100,第四瓶水有毒。
第1,5,6,8老鼠死亡,其他没死,队列为0010110001,第177瓶水有毒。
方法(2)

很容易分析的是,如果只有一只小白鼠,可以分开两瓶水,如下图所示:

将老鼠作为判断工具,放在中间,尝随便一瓶,就可以知道哪瓶有毒。
然后两只老鼠是如何判断四瓶水的呢?
这样,如下图:

将第一瓶和第二瓶作为一组,给一个老鼠去尝,如果老鼠死掉了,那么就可以判定毒药在 I 或者 II 组,然后让第二只老鼠去尝,就可以知道哪瓶是毒药了。(如果幸运的话是不会死老鼠的,死两只小鼠来判断是最坏的情况)。同理,三只小鼠判断8瓶水中的1瓶毒药是这样的:

也就是三只小鼠可以判断2^3瓶水。
应该很容易明白了吧,如果需要判断1000瓶水,最坏的情况是使用N只小鼠判断。

则有2^(N-1)<=1000<=2^(N);N=10.
编辑于 2015-08-22 17:50:05 回复(5)
信息论的思路:单独一瓶药有毒的概率是1/1000,因此一瓶药有毒事件的信息熵为-log2(1/1000)=9.99…比特。一只小白鼠死亡的概率为1/2,设用n只小白鼠测试,小白鼠死亡的信息熵为-nlog2(1/2)应该等于一瓶药有毒的信息熵9.99…比特,所以n=9.99…,取整数为10
发表于 2016-04-16 14:11:30 回复(3)
道理同3-8译码器,3只老鼠可以在一周之内检测出8瓶中哪个有毒,10-1024译码器可以找出1000瓶哪瓶有毒。
发表于 2016-07-25 00:23:06 回复(0)
B
1000分为2组,每组500样物品,取一点放在一起,每组放一只白鼠。 牺牲一只小白鼠 ,保留下500分可能是毒药的,继续分 2 , 250 3 , 125 4 , 62或63 5 , 31或32 6 , 15或16 7 , 7或8 8 , 3或4 9 , 1或2 10 。所以至少为10次
发表于 2014-12-29 18:13:35 回复(5)
二进制思路
发表于 2014-10-13 14:20:04 回复(1)
1000:500:250:125:63:32:16:8:4:2所以最少需要10个老鼠
发表于 2019-01-23 20:00:24 回复(0)
【老鼠试毒药问题】40 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?
解答:
(1)十进制转二进制:瓶子的十进制编号为1-40,每个编号对应一个6位二进制编号,比如40对应的二进制为101000,18对应的二进制为010010。 
(2)进行实验:需要6只老鼠,让这6只老鼠中的第 i 只老鼠喝掉所有二进制第 i 位是1的瓶子,比如第1只老鼠喝掉二进制第1位是1的20个瓶子
  • 000001
  • 000011
  • 0000101, 000111
  • 001001, 001011, 001101, 001111,
  • 010001, 010011, 010101, 010111, 011001, 011011,  011101, 011111
  • 100001, 100011, 1000101, 100111。 
(3)得出结论: 一周之后,如果第i只老鼠死掉,那么说明毒药瓶子编号在对应二进制第 i 位是1,否则是0,由此可以组合出毒药的二进制编号。比如,如果第1只和第3只老鼠死掉,其余4只老鼠没死,那么毒药二进制编号为000101,即十进制编号为5。
(4)总结:因为老鼠的状态只有死或不死,所以这里用二进制表示。
发表于 2018-04-07 13:43:00 回复(0)
之前做过用人测试是否有毒的题。。。额
发表于 2017-09-08 21:25:58 回复(0)
有没有考虑过老鼠吃不吃得下,1000瓶啊!
发表于 2016-08-13 22:24:25 回复(0)
一只老鼠把1000瓶都喝掉就够了,题目表达不清晰
发表于 2017-05-15 08:22:47 回复(0)
2的多少次方大于1000
发表于 2022-08-12 17:21:00 回复(0)
二分法
发表于 2022-02-23 15:38:33 回复(0)
🤔
发表于 2021-12-09 00:04:22 回复(0)
将1000个瓶子,编号1——1000;只需要10位二进制的数就可以表示出单个瓶子;所以10只就足够了。 
发表于 2018-09-11 14:46:03 回复(0)
其实就是状态压缩
1000个药剂只有一个是毒药,所以有一千种状态
而十个老鼠每个都有死和活两种可能,所有有2^10=1024种状态>1000个。实际上如果老鼠有更多状态则可以压缩的更多了。
只需要把每一种状态找到一种方式对应就可以了,最简单就是二进制编码了。
发表于 2017-09-17 14:17:56 回复(0)
如何证明这是最少,我的意思是为什么二分法效率最高而不是三分法,怎么证明
发表于 2017-04-03 03:51:57 回复(1)
2的十次方是1024
发表于 2017-02-05 11:11:29 回复(0)
这个题有答案么,下面的分析都是老鼠死以后才能继续,一周完成不了啊
发表于 2016-09-07 15:42:48 回复(2)
二进制
第一只老鼠喝第 XXXXXXXXX1 瓶水 为1、3、5、7..999一共500瓶
第二只老鼠喝第 XXXXXXXX1X 瓶水 为2、3、6、7...
...
第十只老鼠喝第1XXXXXXXXX 瓶水 为512、513....到最后的水
最后第几只死了就把那位记成1,得到的10位2进制数就是那瓶水。
发表于 2016-08-05 23:03:11 回复(0)