1000只老鼠与毒药的类型问题

1000 个瓶子中有一瓶毒药,一只老鼠吃到毒药一周之内会死,如果要在一周之内检测出有毒药的一瓶,问至少需要几只老鼠?

思路:一个简单的思路是利用二进制来解决类似问题,首先看2^10 > 1000,也就是说这类问题只要由所有老鼠组成的二进制的数大于总的瓶子个数一般就能解决此类问题,当然还要注意细枝末节的一些问题。

那么为什么10只老鼠就能判断出那一瓶毒酒呢?

大家知道二进制数能唯一表示出一个数的情况,n位二进制数能表示的最大数是( 2^n )-1,那么此时我们以10只老鼠为例:

1                                        0000000001

2                                        0000000010

3                                        0000000011

4                                        0000000100

                    ......

1000                                   1111101000

从上面这1000个数字想必大家都能看出,1000个数字由完全不同的二进制码组成,那么此时,我们将这1000个瓶子从1~1000编号,同时呢给10只老鼠编号0~9 ,10个数字,从后往前(符合二进制规律更方便解释)那么将1好杯子的水给下标为0的老鼠喝,第二个杯子的水给下标为1的老鼠喝,第三个杯子 的水给下标为0和1的老鼠和,...实际上就是杯子编号对应的二进制数字哪位为1就给哪只老鼠喝,因为这是唯一的标志,所以一段时间过后,任然按照原来老鼠的序列,死了的老鼠为数字1,没死的为0,由他们组成的二进制数字代表几,那么就是第几杯水有毒。

【注意:有时候会让用杯子融合技术,给小老鼠喝,其实和上面本质一样的,竖着从1~1000,将所有从第0~9为,为1的杯子拿出来分别取出一滴按照0~9的顺序融合到杯子里,分别给0~9只老鼠喝,然后二进制计数,死了为1,否则为0,也能判断出有毒的杯子,呵上面实质同理的】


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值