小鼠是如何找出毒药的?

●🧑个人主页:你帅你先说.
●📃欢迎点赞👍关注💡收藏💖
●📖既选择了远方,便只顾风雨兼程。
●🤟欢迎大家有问题随时私信我!
●🧐版权:本文由[你帅你先说.]原创,CSDN首发,侵权必究。

题目

有 1000 瓶药水,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的药物,最少需要多少只小白鼠?

这题要是没有最少两个字,很多人上来就是直接1000只小鼠。
请添加图片描述
即便没有最少两个字,这样做未免太费小鼠了吧。
那1000只太多了,500只可以吗,每只小鼠喝两瓶(不重复的喝),然后最后查出死掉的老鼠喝掉的两瓶,极限二选一?如果脱离题目本身,这个方法倒是个不错的方法,顶多把两瓶都当做毒药,舍弃一瓶倒也没什么。可惜题目就是要求了要找出那一瓶毒药。

既然通过一只小鼠确定毒药的方法很费小鼠,为什么不用多只小鼠喝同样的一瓶药来确定毒药。但这样似乎也只能确定一个范围,比如5只小鼠死了,我们只能在死了的小鼠喝的药里面确定毒药,所以我们必须保证喝到毒药的小鼠身上有什么特征能够帮我们逐渐缩小范围。我们在学习编程中,有什么东西是有很多情况,但每种情况又是彼此独立跟别的情况不一样的。对了,就是二进制,我们知道对于32位平台下,二进制一共有 2 32 2^{32} 232种情况,即

00000000000000000000000000000001
00000000000000000000000000000011

111111111111111111111111111111111111

1000瓶大概是在 2 10 2^{10} 210 的范围内
所以需要10个bit位
那要怎么操作呢?
首先,先对小鼠进行编号,编为0-9。
其次,给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的是毒药。

如有其它方法,欢迎在评论区留言。
走之前
请添加图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你帅你先说.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值