• 【面经】之小鼠喝药问题


    这是最近某大厂的一道面试题
    这道题答上来可以多获薪2k!!!
    你有没有被这种方式PUA过呢,哈哈哈哈哈~我反正经常

    所以,看会此道题,可以多获薪3K,废话不多说,看题

    Alt

    题目

    现在有 10 只小白鼠和 1000 支药水,1000 支药水中有且仅有一支药水有毒,如果小白鼠喝下毒药,那么毒发的时间是两小时。

    现在只给你两小时的时间,请问如何用这 10 只小白鼠测出哪支药水有毒?(忽略小白鼠喝药的时间)。
    Alt

    Alt

    思考

    当时听完这题,我第一反应是:这题是不是在逗我?
    在这里插入图片描述

    就 10 只小白鼠,喝 1000 支药水,那么一只小白鼠肯定要喝多支药水,假设某只小白鼠两小时后死了,我怎么确定它到底是因为喝了哪支药水死的?

    我直接把我的这个想法跟面试官说了,我说这题目是不是有问题,面试官微微一笑,他说题目没问题,你再想想

    Alt

    再想想

    看到这,不知道诸位是否有啥想法,期间面试官给了我一个提示:10 如何能代表 1000

    这里建议先想个两分钟,各位再思考思考,没啥思路再看我下面的解答。

    Alt

    解答

    不卖关子了,反正我当时没想出来,哈哈,一下子联想不到那里,但是这题听完答案之后又会豁然开朗。

    10 如何能代表 1000?重点就是这个提示,其实就是二进制。

    10 只小白鼠,我们分别给它们编号,从 0-9。

    图片

    每只老鼠喝下药水,最终的结果要么是生,要么是死,所以有两种状态。

    看到这是不是有点感觉了?

    两种状态就是二进制的 0 和 1。

    如下图所示:

    图片

    所以,每只小白鼠有两种状态,那么 10 只小白鼠联合起来,2 的 10 次方是 1024,当然可以表示 1000 个数字了。

    然后我们给每只药水编号,从 0-999。

    好了,操作来了

    0 二进制表示,是 0000000000

    1 二进制表示,是 0000000001

    2 二进制表示,是 0000000010

    3 二进制表示,是 0000000011

    999 二进制表示,是 1111100111

    可以看到我把药水编号转成二进制,一共写了 10 位,每一位其实就表示对应一只小白鼠喝不喝这个药水

    就是说第 0 个小白鼠,把药水编号第 0 位是 1 的药水都喝一遍。

    第 1 个小白鼠,把药水编号第 1 位是 1 的药水都喝一遍。

    第 2 个小白鼠,把药水编号第 2 位是 1 的药水都喝一遍。

    第 9 个小白鼠,把药水编号第 9 位是 1 的药水都喝一遍。

    这样设计之后,除了第 0 瓶药水,其它药水都有小白鼠喝了,所以如果没有小白鼠死亡,那么第 0 号药水有毒。

    那么,如果有小白鼠死亡该怎么判断?

    其实很好理解,假设现在是编号 3 的药水有毒,我们得知编号 3 的二进制是:0000000011

    丛上面的规则我们知道,有且仅有第 0 个和第 1 个老鼠喝了编号 3 这个药水,所以如果别的老鼠都没死,只有这两个老鼠死了,那么我们可以断定编号 3 药水是毒药。

    所以,我们让对应的老鼠喝对应的药水,然后两小时之后观察哪几只老鼠死亡,我们就可以从死亡的老鼠编号反推出毒药的编号。

    假设现在第 0、1、3、5 老鼠死了,那么毒药水编号就是:2^0 + 2^1 + 2^3 + 2^5 = 1 + 2 + 8 + 32 = 43。

    好了,解答完毕。(其实这个题干应该再补充下,每支药水量充足,足够每只小白鼠喝一口)

    现在想想这个方式是不是有点巧妙?有点拓宽思路的感觉。
    Alt

    最后

    这道题看起来好像是智力题,其实给了提示之后就是考察对二进制的掌握程度了。

    现在想想这个方式是不是有点巧妙?有点拓宽思路的感觉。


    各位有什么有趣的问题,欢迎留言评论区~

  • 相关阅读:
    HDFS的Shell操作操作
    2022-09-14 C++并发编程(二十二)
    【剑指offer】删除链表中重复的结点
    RIS 系列 TransVG++: End-to-End Visual Grounding with Language Conditioned Vision Transformer 论文阅读笔记
    Nginx:配置文件的位置及组织简述
    【Spring】Spring bean定义及其作用域
    java计算机毕业设计计算机专业在线学习评估软件-演示录像-源码+数据库+系统+lw文档+mybatis+运行部署
    MYSQL SEQUENCE方案
    如何提高Hbase的读取效率
    聚焦出海 长城汽车50多国家和地区经销商集团齐聚泰国车博会
  • 原文地址:https://blog.csdn.net/distant_Rove666/article/details/127837288