小鼠是如何找出毒药的?
Posted 你帅你先说.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小鼠是如何找出毒药的?相关的知识,希望对你有一定的参考价值。
●🧑个人主页:你帅你先说.
●📃欢迎点赞👍关注💡收藏💖
●📖既选择了远方,便只顾风雨兼程。
●🤟欢迎大家有问题随时私信我!
●🧐版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。
题目
有 1000 瓶药水,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的药物,最少需要多少只小白鼠?
这题要是没有最少两个字,很多人上来就是直接1000只小鼠。
即便没有最少两个字,这样做未免太费小鼠了吧。
那1000只太多了,500只可以吗,每只小鼠喝两瓶(不重复的喝),然后最后查出死掉的老鼠喝掉的两瓶,极限二选一?如果脱离题目本身,这个方法倒是个不错的方法,顶多把两瓶都当做毒药,舍弃一瓶倒也没什么。可惜题目就是要求了要找出那一瓶毒药。
既然通过一只小鼠确定毒药的方法很费小鼠,为什么不用多只小鼠喝同样的一瓶药来确定毒药。但这样似乎也只能确定一个范围,比如5只小鼠死了,我们只能在死了的小鼠喝的药里面确定毒药,所以我们必须保证喝到毒药的小鼠身上有什么特征能够帮我们逐渐缩小范围。我们在学习编程中,有什么东西是有很多情况,但每种情况又是彼此独立跟别的情况不一样的。对了,就是二进制,我们知道对于32位平台下,二进制一共有 2 32 2^{32} 232种情况,即
00000000000000000000000000000001
00000000000000000000000000000011
…
111111111111111111111111111111111111
1000瓶大概是在
2
10
2^{10}
210 的范围内
所以需要10个bit位
那要怎么操作呢?
首先,先对小鼠进行编号
其次,给1000瓶药水也进行编号,以二进制的形式,例如,第一瓶药水编号为0000000001,第四瓶药水为0000000100,以此类推
然后小鼠🐁就可以开始喝药
了
喝药规则如下
编号为0的小鼠喝 2 0 2^{0} 20位是1的药水
例如,0号🐁要喝
0000000001
0000000001
0000000011
0000000111
…
1111100001
以此类推,1号🐁要喝 2 1 2^{1} 21位是1的药水
那最终要怎么知道哪一瓶药有毒呢?
举个栗子🌰
假如第0、1、3、6、7号🐁被毒死了,那就是0011001011是毒药,那就是编号为203
的是毒药。
如有其它方法,欢迎在评论区留言。
走之前
以上是关于小鼠是如何找出毒药的?的主要内容,如果未能解决你的问题,请参考以下文章
问题:有1000杯水,其中有一杯是毒水,现在需要从中找出含毒药的水,可以用老鼠来实验;老鼠如果喝了有毒的水,一个小时内必死,请问如何安排试验,能够用最少的实验材料在一个小时内检测出有毒的水?