首页 > 试题广场 >

有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24

[单选题]
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
  • 8
  • 9
  • 10
  • 11
每个老鼠只有死或活2种状态,因此每个老鼠可以看作一个bit,取0或1
N个老鼠可以看作N个bit,可以表达2^N种状态(其中第i个状态代表第i个瓶子有毒)
例如:当N=2时,可以表达4种状态
0,0( 一号老鼠活,二号老鼠活)
0,1 一号老鼠活,二号老鼠死)
1,0 一号老鼠死,二号老鼠活)
1,1 一号老鼠死,二号老鼠死)
具体来说,有A、B、C、D这4个瓶子,一号老鼠喝A和B, 二号老鼠喝B和C
如果 0,0 ( 一号老鼠活,二号老鼠活),说明是D有毒,第0个状态代表第4个瓶子有毒
如果 0,1 一号老鼠活,二号老鼠死) ,说明是C有毒 ,第1个状态代表第3个瓶子有毒
如果 1,0 一号老鼠死,二号老鼠活) ,说明是A有毒 ,第2个状态代表第1个瓶子有毒
如果 1,1 一号老鼠死,二号老鼠死) ,说明是B有毒 ,第3个状态代表第2个瓶子有毒
编辑于 2016-09-07 16:28:24 回复(4)
可以想象成用2进制来表示1000个数最少需要多少位
编辑于 2015-08-18 17:03:56 回复(6)

给1000个瓶子分别采用二进制编号:

第一个瓶子:0000000001
第二个瓶子:0000000010
第三个瓶子:0000000011
...
第一千个瓶子:1111101000

上述十个二进制位对应10只小白鼠,从左到右分布,编号分别为1~10,二进制位第一位是1的瓶子里的液体取出来混合给第一个小白鼠喝下,以此类推,第十位是1的瓶子中的液体取出来给第十个小白鼠喝下(对应上述的第一瓶、第三瓶等)。再过24小时来收尸(查看小白鼠的死亡状况),从左到右,给死亡的小白鼠标1,没死完的标0,组成的二进制数再转化为十进制,就是有毒的液体编号。

发表于 2019-03-06 09:42:10 回复(1)
本题其实考察的是逻辑数字电路中的编码器。以8-3编码器为例:



根据逻辑表达式,将瓶子编号为I1、I3、 I5、 I7喂食给Y0号小白鼠, 瓶子编号为I2、 I3、 I6、 I7喂食给Y1号小白鼠, 瓶子编号为I4、 I5、 I6、 I7喂食77给Y2号小白鼠。如果I0号瓶子有毒,则小白鼠全活(Y0Y1Y2=111),如果 如果I7号瓶子有毒,则小白鼠全死(Y0Y1Y2=000), 如果I2号瓶子有毒,则Y1小白鼠活,其余死( Y0Y1Y2=010 )。。。。。。

编辑于 2017-05-21 19:33:40 回复(6)
设有n个老鼠,每个老鼠选择其中的n个瓶子喝药,
其中有1个瓶子n个老鼠都喝
其中有C(n,n-1)个瓶子有n-1个老鼠喝过
其中有C(n,n-2)个瓶子有n-2个老鼠喝过
。。。
其中有C(n,2)个瓶子只有2个老鼠喝过
有C(n,1)个瓶子只有1个老鼠喝过
假如最后有k个老鼠死掉了,那么根据这k个老鼠共同喝过那个瓶子的药,就知道那个瓶子有毒药了
所以n个老鼠,最大可以辨别C(N,N)+C(N,N-1)+C(N,N-2)+...C(N,1)=2^N-1
所以答案选B,10
发表于 2015-09-10 08:31:02 回复(1)
最容易想到的就是用1000只小白鼠,每只喝一瓶。但显然这不是最好答案。
既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢? 首先让我们换种问法,如果有x只小白鼠,那么24小时内可以从多少瓶水中找出那瓶有毒的? 由于每只小白鼠都只有死或者活这两种结果,所以x只小白鼠最大可以表示2^x种结果。如果让每种结果都对应到某瓶水有毒,那么也就可以从2^x瓶水中找到有毒的那瓶水。那如何来实现这种对应关系呢? 第一只小白鼠喝第1到2^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)瓶....以此类推。 回到此题,总过1000瓶水,所以需要最少10只小白鼠。
发表于 2014-11-13 22:03:08 回复(0)
一号瓶不派老鼠去喝      C(n,0)
派一只老鼠  可得组合数为C(n,1)可以喝 2号瓶到  C(n,1)+1号瓶
派两只老鼠  可得组合数为C(n,2)可以喝C(n,1)+2号瓶到  C(n,1)+C(n,2)+3号瓶
以此内推........
若一只老鼠都不死 则是一号瓶有毒
若只有一只老鼠死则是2号瓶到 C(n,1)+1号瓶有毒,看死的是哪一只老鼠
                喝一瓶水时派它喝的是哪瓶,哪瓶就有毒
以此内推..........
那么 所有的情况为 C(n,0)+C(n,1)+C(n,2)+..........+C(n,n)=(1+1)^n=2^n
此时需要2^n大于等于1000   得到n(min)=10;
编辑于 2016-06-17 09:34:53 回复(0)
我觉得题目不对。。。,老鼠喝了24小时之后才会死,然后要24小时时知道结果只能是1000只,因为你让每只老鼠喝多瓶之间的时间没算上,至少也要加上不考虑喝水耗时,不然只要8个,一天喝一瓶,1000天之后就知道结果了
发表于 2019-03-08 13:32:36 回复(0)
先不说题,这题出的不道德
发表于 2017-03-27 23:16:54 回复(0)
ryl头像 ryl
霍夫曼树走10层,每层需要一个老鼠判断二叉树往左走还是往右走。
发表于 2016-03-28 16:25:28 回复(1)
解题技巧:https://blog.csdn.net/weixin_44268113/article/details/104214900
发表于 2020-02-09 12:05:43 回复(0)
我的想法是怎么在1到1000内用最快的方法找出一个有毒的瓶子,二分最快,2^10>1000,已经能保证能找出来了
发表于 2019-11-05 19:56:01 回复(0)
解析都说的好复杂,我是想着每次都分半兑在一起喝,1000和2的十次方最接近
发表于 2022-02-28 17:40:17 回复(0)
每个老鼠只有死或活2种状态,因此每个老鼠可以看作一个bit,取0或1
N个老鼠可以看作N个bit,可以表达2^N种状态(其中第i个状态代表第i个瓶子有毒)

最终问题抽象成:用2进制来表示1000个数最少需要多少位
PS: 2^8-256, 2^10=1024
发表于 2019-05-22 13:20:09 回复(0)
对于每一个瓶子都有一个特定集合的老鼠喝过

发表于 2015-09-02 17:49:54 回复(2)
把10只老鼠,从0到9进行编号,1000瓶水也从0到999进行编号,老鼠喝水表示1,不喝水表示0,总共有2^10情况,用前1000种情况和1000瓶水一一对应,每种情况需要喝水的老鼠的编号都是不同的,24小时后,查看所有死亡老鼠对应的编号,即可找到哪瓶水有毒
发表于 2022-08-18 09:46:17 回复(1)
二分法
发表于 2022-03-04 11:52:39 回复(0)
YL_头像 YL_
海明码,检错纠错,冗余比特个数
发表于 2023-11-21 20:59:38 回复(0)
转换为二进制表达的个数
发表于 2021-08-31 19:43:46 回复(0)
老鼠是怎么着都得死啊
发表于 2018-03-25 18:31:49 回复(0)