不要总想着二进制

同事转了一道题:程序员

有 100 支如出一辙的瓶子,编号 1-100。其中 99 瓶是水,1 瓶是看起来像水的毒药。
只要老鼠喝下一小口毒药,一天后就会死。code

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

翻看答案:程序

首先,将瓶子的 10 进制编号数改为 7 位的 2 进制码。
而后,让第 1 只老鼠喝全部 2 进制码第 1 位是 1 的瓶子中的水;让第 2 只老鼠喝全部 2 进制码第 2 位是 1 的瓶子中的水;以此类推下去。
这样,每一个老鼠次日的死活状况就决定了毒水瓶子二进制码这一位的数字:老鼠死,对应 1,反之为 0.时间

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

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

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

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

能让每种可能的毒药状态映射到不一样的小鼠生死状态,都是这道题的解。

给出的答案只是A(128, 100)种方案中的一种。

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

  • 1 是毒药对应小鼠 1 会死,因此 1 只让小鼠 1 喝
  • 2 是毒药对应小鼠 2 会死,因此 2 只让小鼠 2 喝
    ...
  • 7 是毒药对应小鼠 7 会死,因此 7 只让小鼠 7 喝
  • 8 是毒药对应小鼠 一、2 会死,因此 8 只让小鼠 一、2 喝
    ...

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

相关文章
相关标签/搜索