不要總想着二進制

同事轉了一道題:程序員

有 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 喝
    ...

總和二進制打交道,致使咱們想問題角度總往二進制上靠,僅得出一些只有程序員才能理解的答案。

相關文章
相關標籤/搜索