首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,
[单选题]
1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?
8
10
32
999
添加笔记
邀请回答
收藏(975)
分享
27个回答
添加回答
161
推荐
叶小鱼
1000个瓶子编号1-1000, 每个编号会有一个10位的二进制数字。 10只老鼠,依次喝掉所有二进制第一位是1的瓶子,第二位是1的瓶子。。。第十位是1的瓶子。 一周之后,死掉的老鼠说明毒药瓶子编号在对应二进制位置是1,否则是0。可以组合出毒药的编号。
编辑于 2014-12-30 20:16:33
回复(15)
117
Sword52888
根据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)
35
念润
方法(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)
17
牛客872002号
信息论的思路:单独一瓶药有毒的概率是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)
6
Mr.Lane
道理同3-8译码器,3只老鼠可以在一周之内检测出8瓶中哪个有毒,10-1024译码器可以找出1000瓶哪瓶有毒。
发表于 2016-07-25 00:23:06
回复(0)
6
我的大学
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)
4
su醉月
二进制思路
发表于 2014-10-13 14:20:04
回复(1)
2
mayawenming
1000:500:250:125:63:32:16:8:4:2所以最少需要10个老鼠
发表于 2019-01-23 20:00:24
回复(0)
2
飞雪Snown
【老鼠试毒药问题】40 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?
解答:
(1)十进制转二进制:瓶子的十进制编号为1-40,每个编号对应一个6位二进制编号,比如40对应的二进制为101000,18对应的二进制为010010。
(2)进行实验:需要6只老鼠,让这6只老鼠中的第 i 只老鼠喝掉所有二进制第 i 位是1的瓶子,比如第1只老鼠喝掉二进制第1位是1的20个瓶子
00000
1
,
00001
1
,
000010
1
, 00011
1
,
00100
1
, 00101
1
, 00110
1
, 00111
1
,
01000
1
, 01001
1
, 01010
1
, 01011
1
, 01100
1
, 01101
1
, 01110
1
, 01111
1
,
10000
1
, 10001
1
, 100010
1
, 10011
1
。
(3)得出结论: 一周之后,如果第i只老鼠死掉,那么说明毒药瓶子编号在对应二进制第 i 位是1,否则是0,由此可以组合出毒药的二进制编号。比如,如果第1只和第3只老鼠死掉,其余4只老鼠没死,那么毒药二进制编号为000101,即十进制编号为5。
(4)总结:因为老鼠的状态只有死或不死,所以这里用二进制表示。
发表于 2018-04-07 13:43:00
回复(0)
2
小白VI
之前做过用人测试是否有毒的题。。。额
发表于 2017-09-08 21:25:58
回复(0)
2
-狂战-
有没有考虑过老鼠吃不吃得下,1000瓶啊!
发表于 2016-08-13 22:24:25
回复(0)
1
菜—鸡
一只老鼠把1000瓶都喝掉就够了,题目表达不清晰
发表于 2017-05-15 08:22:47
回复(0)
0
来钱
2的多少次方大于1000
发表于 2022-08-12 17:21:00
回复(0)
0
牛客988124361号
二分法
发表于 2022-02-23 15:38:33
回复(0)
0
风灵月影
🤔
发表于 2021-12-09 00:04:22
回复(0)
0
杨大官人
将1000个瓶子,编号1——1000;只需要10位二进制的数就可以表示出单个瓶子;所以10只就足够了。
发表于 2018-09-11 14:46:03
回复(0)
0
谷米牛
其实就是状态压缩
1000个药剂只有一个是毒药,所以有一千种状态
而十个老鼠每个都有死和活两种可能,所有有2^10=1024种状态>1000个。实际上如果老鼠有更多状态则可以压缩的更多了。
只需要把每一种状态找到一种方式对应就可以了,最简单就是二进制编码了。
发表于 2017-09-17 14:17:56
回复(0)
0
铃铃丁丁的昵称不敷衍
如何证明这是最少,我的意思是为什么二分法效率最高而不是三分法,怎么证明
发表于 2017-04-03 03:51:57
回复(1)
0
牛客5485726号
2的十次方是1024
发表于 2017-02-05 11:11:29
回复(0)
0
弹指江山
这个题有答案么,下面的分析都是老鼠死以后才能继续,一周完成不了啊
发表于 2016-09-07 15:42:48
回复(2)
0
꧁Kai
二进制
第一只老鼠喝第 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)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
数学运算
来自:
微策略试卷
上传者:
小海豹
难度:
27条回答
975收藏
40890浏览
热门推荐
相关试题
87的100次幂除以7的余数是多少?
数学运算
评论
(35)
来自
搜狐2013校招研发工程...
34的17次方 对6取余, 结果是多少?
数学运算
评论
(43)
来自
人人网2015研发笔试卷E
赛马,至少需要几轮比赛才能得出前三...
产品
运营
数学运算
评论
(8)
下面程序的执行结果是?
微软
C++
评论
(70)
来自
微策略试卷
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题