经典面试题【老鼠喝水】

经典面试题【老鼠喝水】

面试题库【老鼠喝水】


一、常见题目

我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,能够检测多少瓶液体的成分?

A、5瓶  B、6瓶  C、31瓶  D、32瓶

答案: C

二、详细思路

1.转换思维

从题目中我们得到已知的条件是:

  1. 很多瓶液体其中有一瓶为毒药。
  2. 5分钟时间测出成分,小白鼠毒发五分钟死亡,因此5只小白鼠需要同时进行试验。
  3. 每只老鼠有生与死两种状态。即 生0 死1。
    可以简单联想到二进制数来表示老鼠的存活情况,也是此类题目的考察要点。

2.转换为熟悉的二进制

二进制格式为:

101100110011

将5只小白鼠分别对应每一位二进制:

0 0 0 0 1
0 0 0 1 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
示例:19 表示为 1 0 0 1 11 * 16 + 0 * 8 + 0 * 4 + 1 * 2 + 1 * 1 
当 第一只 第二只 第五只死亡时 
即可知道 第十九瓶液体 为毒药

提示:当五只老鼠均存活时,即 0 0 0 0 0 时 无法确认第三十二瓶 ,由于很多瓶 大于 三十二 ,我们只能知道毒药在其他液体中。
因此 我们可以检测至少 2^5 - 1 即 31 瓶


三、相似的题型

有100只一模一样的瓶子,编号1-100。其中99瓶是水,一瓶是看起来像水的毒药。只要老鼠喝下一小口毒药,一天后则死亡。现在,你有7只老鼠和一天的时间,如何检验出哪个号码瓶子里是毒药?

1.解题思路

从题目中我们得到已知的条件是:

  1. 100瓶液体其中有一瓶为毒药。
  2. 一天内测出成分,小白鼠毒发一天死亡,因此7只小白鼠需要同时进行试验。
  3. 每只老鼠有生与死两种状态。即 生0 死1。
    同样可以简单联想到二进制数来表示老鼠的存活情况,也是此类题目的考察要点。

2.转换为熟悉的二进制

二进制格式为:

101100110011

将5只小白鼠分别对应每一位二进制:

0 0 0 0 0 0 1
0 0 0 0 0 1 0
0 0 0 0 1 0 0
0 0 0 1 0 0 0
0 0 1 0 0 0 0
0 1 0 0 0 0 0
1 0 0 0 0 0 0
示例:19 表示为 0 0 1 0 0 1 10 * 64 + 0 * 32 + 1 * 16 + 0 * 8 + 0 * 4 + 1 * 2 + 1 * 1 
当 第一只 第二只 第五只死亡时 
也可知道 第十九瓶液体 为毒药

7位二进制数最大可表示127 即 1 1 1 1 1 1 1
代表所有瓶子均可以有一种唯一情况表示,观察老鼠存货情况。
例子: 当老鼠为 “活死死活活死死” 时 即代表 0110011 = 51


四、其他相似题目

以下问题均为相似题目可供练手,
问题1:

有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

问题2:

有 8 个一模一样的瓶子,其中有 7 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 3 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?


总结

老鼠喝水是一道经典算法面试题,但是转换为二进制思路会让你恍然大悟,算法只是一个思路。

希望这个博客能对你有所益处。我是轻王,我为自己代言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猫轻王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值