zoukankan      html  css  js  c++  java
  • 不要总想着二进制

    同事转了一道题:

    有 100 支一模一样的瓶子,编号 1-100。其中 99 瓶是水,1 瓶是看起来像水的毒药。

    只要老鼠喝下一小口毒药,一天后就会死。

    现在你有 7 只老鼠和一天时间,怎么检验出哪个号码的瓶子里是毒药?

    翻看答案:

    首先,将瓶子的 10 进制编号数改成 7 位的 2 进制码。

    然后,让第 1 只老鼠喝所有 2 进制码第 1 位是 1 的瓶子中的水;让第 2 只老鼠喝所有 2 进制码第 2 位是 1 的瓶子中的水;以此类推下去。

    这样,每个老鼠第二天的死活情况就决定了毒水瓶子二进制码这一位的数字:老鼠死,对应 1,反之为 0。

    看懂后你也许会说:啊~~~原来是二进制啊~~~

    可我要说:这道题和二进制无关,本质是寻找一组映射关系:

    毒药状态小鼠生死状态 的映射关系。

    • 1-100 有一瓶是毒药,可能的状态共有 100 种。
    • 7 只小鼠编上号,每只小鼠有生或死两种状态,状态有 2^7 种。

    能让每种可能的 毒药状态 映射到不同的 小鼠生死状态,都是这道题的解。给出的答案只是 A(128, 100) 种方案中的一种。

    例如构造一个让小鼠死亡最少的方案:

    • 1 是毒药对应小鼠 1 会死,所以 1 只让小鼠 1 喝
    • 2 是毒药对应小鼠 2 会死,所以 2 只让小鼠 2 喝
    • ……
    • 7 是毒药对应小鼠 7 会死,所以 7 只让小鼠 7 喝
    • 8 是毒药对应小鼠 1、2 会死,所以 8 只让小鼠 1、2 喝
    • ……

    总和二进制打交道,导致我们想问题角度总往二进制上靠,仅得出一些只有程序员才能理解的答案。

  • 相关阅读:
    v-model的实现原理
    面试技巧
    Vue中使用mui的tab-top-webview-main完成分类滑动栏出现兼容问题如何解决
    前端jquery面试题个人总结
    下拉复选框
    什么是BFC
    CSS控制文本自动换行
    CSS+DIV布局中absolute和relative区别
    2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面
    vue页面无操作10分钟内调转到登录页面
  • 原文地址:https://www.cnblogs.com/apolis/p/10668006.html
Copyright © 2011-2022 走看看