首页
题库
面试
求职
学习
竞赛
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收藏
40889浏览
热门推荐
相关试题
34的17次方 对6取余, 结果是多少?
数学运算
评论
(43)
来自
人人网2015研发笔试卷E
赛马,至少需要几轮比赛才能得出前三...
产品
运营
数学运算
评论
(8)
87的100次幂除以7的余数是多少?
数学运算
评论
(35)
来自
搜狐2013校招研发工程...
有多少升啤酒?
数学运算
评论
(58)
来自
微策略试卷
电路板布线的时候尽量采用( )折线布线
PCB
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题