15个瓶子4只老鼠问题

今天被问到一个问题:15个瓶子里有一个有毒,你有四只老鼠,老鼠喝了有毒的水,第二天会死。请问怎样才能在第二天就知道哪个瓶子有毒?

面试碰到这类问题其实关键不在于答案,而在于思路,这也正是面试官在有限时间里想看到的东西。

说下我的思路:

拿到这个问题我第一时间想到的是二分查找。
巧的是,16正好是2的4次方,也就意味着,这题的出题多半就是一个查找问题。好,那么怎么样把解决方案细化下去呢。
首先是二分,把15瓶分成1-7 和8-15两部分
第一只老鼠(甲鼠)的使命就是喝下其中一部分全部的水,这样根据他死亡情况,可以把结果区间进行二分。
同样的思路,第二只老鼠(乙鼠)要对剩下的结果进行二分,但我们可以充分利用他,让他同时喝下1-4以及8-12的水,因为我们可以结合第一只老鼠的死亡情况,来将结果定位到四分区间内。
以此类推,第三只老鼠(丙鼠)喝下编号为1-2,5-6,9-10,13-14的水。
最后一只老鼠(丁鼠)喝下编号为1,3,5,7,9,11,13的水。
此时,我们已经可以通过老鼠的死亡状况,来推测出15个瓶子中有毒瓶子的序号了。
同时这也就推导出了一张二进制编码表。

结论

至此,这个问题就解决了。
当你把这张表交给面试官时,收获的一定是一个肯定的眼神。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

COrangeC

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

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

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

打赏作者

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

抵扣说明:

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

余额充值