小白鼠试药问题。

在某次面试的时候遇到的问题,如下:一千瓶药里只有一瓶有毒,一周后毒发。用10只老鼠试药,要怎样才能检测出有毒的那瓶药?

我一开始以为每只老鼠只能喝一瓶药,所以想了很久都没有想出来,后来参考:

http://zhidao.baidu.com/link?url=q_w2eqyptqobnl0gPRzeE9Q9ScoJyJJWi7XLwPRIApWR3fCQu_svD1naluRGKK1EZo0f6vJ8VFLWT6Pe3cnHf_

http://bbs.csdn.net/topics/370210548

http://tieba.baidu.com/p/1662492456#

这个不错哦:http://dong008259.blog.163.com/blog/static/51645417201192911561141/

才想明白了。下面以3只老鼠检测8瓶药为例讲解:

每瓶药依次编号为000,001,010,011,100,101,110,111右边为低位

共有3只老鼠,第一只老鼠喝所有第一位(从右开始)为1的药,即喝第1,3,5,7瓶药;第二只老鼠喝所有第二位为1的药,即喝第2,3,6,7瓶药;第三只老鼠喝所有第三位(从右开始)为1的药,即第4,5,6瓶药。

一星期之后,如果某只老鼠死,标记为1,活标记为0。则如果第1只老鼠活,第2,3,只老鼠都死了,即110=6说明第6瓶要是毒药,其他都是无毒的。

因为第1只老鼠活的,而第一只老鼠只喝了1,3,5,7瓶药,说明第1,3,5,7瓶药是无毒的,第2,3,只老鼠是死的,而第2只老鼠只喝了2,3,6,7瓶,第3只老鼠只喝了4,5,6瓶,交集即为第6瓶药。所以第6瓶要是毒药。


易知,根据二进制编码,3只老鼠共可以编码2^3=8种,所以可以检测8种药。如果是10只老鼠,可以检查2^10=1024瓶药。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值