如何用最少的老鼠试出有毒的牛奶?
原文链接:https://blog.csdn.net/dam454450872/article/details/104438382
题目
有 n 桶牛奶,其中有 1 桶有问题,老鼠喝了后第二天会死掉。如何在最短时间内用最少的老鼠测出有问题的那瓶牛奶?
答案
如果 n 是 2 的整数次幂,就是 n 转换为二进制后的位数减一。如果 n 不是 2 的整数次幂,就是 n 转换为二进制后的位数。
即下面的计算
log2(n),如果是整数,那这个整数就是最少的老鼠。如果有小数,整取后并加1后的值为最少的老鼠数
操作方案
为了方便演示假设 n = 8,转换成二进制位 1000,可知需要最少的老鼠是 4 只,但因为 8 是 2 的整数次幂,其实最后只需要 3 只老鼠,我们先用 4 只老鼠说
第一步
给 8 桶牛奶用二进制编号
第 1 桶牛奶 0001
第 2 桶牛奶 0010
第 3 桶牛奶 0011
第 4 桶牛奶 0100
第 5 桶牛奶 0101
第 6 桶牛奶 0110
第 7 桶牛奶 0111
第 8 桶牛奶 1000
第二步
4 只老鼠按顺序排好,面对着牛奶对应的二进制编号,每桶二进制编号为 1 对应的老鼠喝牛奶
老鼠 1 喝第 8 桶的牛奶
老鼠 2 喝第 4、5、6、7 桶的牛奶
老鼠 3 喝第 2、3、6、7 桶的牛奶
老鼠 4 喝第 1、3、5、7 桶的牛奶
第三步
第二天后把这 4 只老鼠还按昨天的顺序排好,死了的老鼠标记为 1,没有死的老鼠标记为 0,这这样 4 只老鼠就组成了一个二进制的数,与之对应的牛奶编号就是有毒的那桶。比如老鼠 2 和老鼠 3 死了,对应的二进制编号为 0110,那就说明第 6 桶牛奶有毒
我们知道 n 为 2 的整数次幂的话,对应的二进制只有在最高位为1,也就是对应的第 n 桶牛奶只有一只老鼠喝,我们可以把这个老鼠省下来,用剩下的老鼠喝其余桶中的牛奶。如果这些老鼠都没死,那就说明是第 n 桶牛奶有毒了。
后记
这种题考查了对二进制的应用,也有很多变种面试题,但万变不离其宗,掌握了方法方可以不变应万变
这是一位网友的微信支付一面中遇到的题,我看到后,一点思路都没有,但有的朋友直接就把方案说出来了,可见平时积累的重要性
如何用最少的老鼠试出有毒的牛奶?相关推荐
- 面试官:如何用最少的老鼠试出有毒的牛奶?
面试题 有 n 桶牛奶,其中有 1 桶有问题,老鼠喝了后第二天会死掉.如何在最短时间内用最少的老鼠测出有问题的那瓶牛奶? 答案 如果 n 是 2 的整数次幂,就是 n 转换为二进制后的位数减一.如果 ...
- 面试:如何用最少的老鼠试出有毒的牛奶?
面试题 有 n 桶牛奶,其中有 1 桶有问题,老鼠喝了后第二天会死掉.如何在最短时间内用最少的老鼠测出有问题的那瓶牛奶? 答案 如果 n 是 2 的整数次幂,就是 n 转换为二进制后的位数减一.如果 ...
- 2021-08-27 思考:1000瓶药水,1瓶有毒,老鼠毒发24h,如何用最少的老鼠在24h内找出毒药?
题目: 现在有1000瓶药水,其中一瓶有毒,一只老鼠喝了在24h后会准时死亡,药水无色无味,如何用最少的老鼠在24h内找出毒药? 分析: 时间限制为24h,说明我们只有一次喂老鼠的机会,需要一波找出来 ...
- 2019-02-13 思考:1000瓶药水,1瓶有毒,老鼠毒发24h,如何用最少的老鼠在24h内找出毒药?
题目: 现在有1000瓶药水,其中一瓶有毒,一只老鼠喝了在24h后会准时死亡,药水无色无味,如何用最少的老鼠在24h内找出毒药? 分析: 时间限制为24h,说明我们只有一次喂老鼠的机会,需要一波找出来 ...
- 1000瓶有毒的水,用多少只老鼠可以试出有毒的那瓶
文章目录 信息论解法 二分法解法 二进制解法 信息论解法 信息论解法得不到过程,只能得到结论 老鼠只有两种结果,死或者不死,当这两种可能相等的时候,可以得到最大的信息量,log2 = 1比特.设法让每 ...
- [面试题]1000瓶水中有1瓶是有毒的,问需要多少只老鼠才能试出那瓶有毒?
问题描述: 1000瓶水里面只有1瓶是有毒的,毒发时间为1个小时,问需要多少只老鼠才能在1小时后试出那瓶有毒. 相关资料: Bloom Fliter 算法 参考思路: 210 = 1024 > ...
- 笔试加分题:有16瓶水,其中只有一瓶水有毒,小白鼠喝一滴之后一小时会死。请问最少用() 只小白鼠,在1小时内一定可以找出有毒的水?
原题: https://www.nowcoder.com/questionTerminal/a09c0eecbf684b0cba2ad0be32b7988e?orderByHotValue=1& ...
- 8个试剂,其中一个有毒,最少多少只小白鼠能检测出有毒试剂——分而治之思想...
面试题:8个试剂,其中一个有毒,最少多少只小白鼠能检测出有毒试剂 方法1: 用3只小鼠,能组合成8种状态. 第一只喂食[1.3.5.7]四只试剂 第二只喂食[2.3.6.7]四只试剂 第三只喂食[4. ...
- 1000瓶水其中有一瓶水有毒,有10只老鼠并且只要老鼠喝了有毒的水必死。请问怎样通过一次实验找出有毒的那瓶水。
1000瓶水其中有一瓶水有毒,有10只老鼠并且只要老鼠喝了有毒的水必死.请问怎样通过一次实验找出有毒的那瓶水. . 这道题知识点:二进制. 解题思路:2的10次方等于1024,1024以内的所有自然数 ...
最新文章
- pyrender 安装
- 文字收缩下面半透明效果
- 软件设计文档国家标准_GB8567--88
- geoserver native JAI error 问题解决方法
- 【2019牛客暑期多校训练营(第五场)- E】independent set 1(最大独立集,状压dp)
- Liaoning Province--保三成功
- 作者:程文亮(1989-),男,华东师范大学数据科学与工程研究院硕士生
- python打印json_Python漂亮打印JSON
- stl sort分析
- Redis: 为行情数据库设计键值
- JAVA WBE入门之HTML的使用(超详细,必看)附实例和代码
- Axure RP 7.0初学篇01-------安装
- 360搜索核心算法,被K后如何恢复?
- 如何减小电压跟随器输出电阻_电压跟随器秘笈:LM358电压跟随器+运放问题
- NVR(网络硬盘录像机)以及其他相近名词DVR、DVS、NVS
- 凝思系统服务器系统版本,凝思操作系统Custom Linx安装教程
- 企业微信聊天工具栏怎么开启?如何调整位置?
- IDEA中配置数据库连接
- layui文件上传(头像上传)
- matlab示波器怎么求值,matlab示波器用法