一些有趣的测试题

1.问题:现在有100瓶药,只有1瓶是有毒的,老鼠试完药需要3天才能知道药是否有毒,而现在需要3天知道100瓶中哪一瓶有毒,请问至少需要多少只老鼠?

    解决方法:100瓶太多,不适合理解。

    我们现在假设只有5瓶,把这5个瓶子进行编号(1~5),然后用二进制表示每一瓶的号码:

            1        =>        0        0        1

            2        =>        0        1        0

            3        =>        0        1        1

            4        =>        1        0        0

            5        =>        1        0        1

                                  m1     m2     m3

    我们看到五个瓶子可以用3位二进制表示,现在把这三位分别记做s1,s2,s3.

    现在找一个老鼠m1去吃s1的药,相当于m1吃了4号和5号瓶子的药,老鼠m2吃s2的药(相当于同时吃2号和3号瓶),老鼠m3吃s3的药(相当于吃了1,3,5号瓶的药)。

    假如三天后m1死了,就说明4或者5号瓶的药有毒,由于m2不可能吃到4,5号的药,所以肯定不会死,那么就看m3是不是死了,假如s3死了,说明5号瓶有毒,因为5号瓶是唯一一个既给m1吃又给m3吃的.

    所以至少需要三个老鼠,这个算法是2^3=8 > 5

    同理,100个瓶子至少需要的老鼠2^7=128 > 100,至少需要7只老鼠。

    如果你熟悉这个过程,只需要知道哪几个老鼠死了,从高位到低位依次记录就行,死了的老鼠记为1,没死的记为0。

    记录方法如下:m1,m4,m5,m7死,其余活着,那么你得到的二进制为:1001101  ,转换成十进制为:77。说明77号瓶子有毒。

               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值