面试题:1000瓶酒找1瓶毒酒

昨天,在首页上看到了这个题目,出于好奇点开了。

1000瓶酒里面只有1瓶是有毒的,毒发时间为24个小时,问用10只小白鼠怎么在24小时后试出哪瓶有毒。

我写博客的原则就是吧,自己理解了、学会了,就会把它记录下来,如果没有理解的话,就不写博客。也不会觉得哪篇文章写得好,就把它转载一下,别人的就是别人的,你转载一下就是你的了吗?只有自己学会了的,写下来才有意义。

这道题的解法不是很复杂,但是刚开始我没有理解,想不懂为什么要这样做。But,这道题真的好有趣啊,于是,我就去看了相关的一些内容。最后,就是理解了吧,稍微有点成就感。

解题想法:
现有10只小白鼠,小白鼠的状态用0-1进行表示(0:表示该小白鼠不喝这瓶酒,1:表示该小白鼠喝这个酒)所以有2^10=1024种可能性,最多可以检验1024瓶酒,1000瓶自然也是可以的。

1000瓶酒进行编号1-1000,再把编号转换为二进制数字。
第1瓶 00 0000 0001 (第十只小白鼠喝掉)
第2瓶 00 0000 0010 (第九只小白鼠喝掉)
第3瓶 00 0000 0011 (第九、十只小白鼠喝掉)
第4瓶 00 0000 0100 (第八只小白鼠喝掉)
第5瓶 00 0000 0101 (第八、十只小白鼠喝掉)
第6瓶 00 0000 0110 (第八、九只小白鼠喝掉)
……以此类推

第十只小白鼠表示:2^0=1
第九只小白鼠表示:2^1=2
第八只小白鼠表示:2^2=4
第七只小白鼠表示:2^3=8
第六只小白鼠表示:2^4=16
第五只小白鼠表示:2^5=32
第四只小白鼠表示:2^6=64
第三只小白鼠表示:2^7=128
第二只小白鼠表示:2^8=256
第一只小白鼠表示:2^9=512

24小时后,
如果只有第十只小白鼠死掉了,那么表示第1瓶酒有毒;
(虽然第十只小白鼠还喝其他的酒了,但是如果是其他的酒有毒,肯定不止第十只小白鼠死掉,还会有其他的小白鼠死掉)

如果是第十只和第九只小白鼠死掉了,那么表示第3瓶酒有毒,因为第九只和第十只小白鼠喝的共同的一瓶酒是第3瓶;

以此类推。24小死后,我们可以观察哪些小白鼠死掉了,哪些小白鼠活着。

如果死掉的小白鼠是第1只和第7只,那么有毒的酒就是(512+8=520)第520瓶酒。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值