你只有 10 只小白鼠和一星期的時間,如何檢驗出哪個瓶子裏有毒藥?

前言:

    我爲什麼會過來解這道數學題呢?我的腦回路大概是這樣的

   讀hashmap源碼->發現大量位運算->發現這道題也是位運算的典型。

問題:

有 1000 個一模一樣的瓶子,其中有 999 瓶是普通的水,有一瓶是毒藥。任何喝下毒藥的生物都會在一星期之後死亡。現在,你只有 10 只小白鼠和一星期的時間,如何檢驗出哪個瓶子裏有毒藥?

解釋:

該問題與三隻老師喝8瓶水問題模型一樣,這裏用三隻吧,方便列舉

  首先2的三次方是8(2的10次方式1024),然後正好三隻老鼠和8瓶藥,我們不妨用二進制的方式來表示

0 0 0  分別表示三隻老鼠,那隻老鼠死了就表明喝了毒藥,將死的哪位置位1,(比如3號老鼠死了就是001)

然後我們在分別吧8瓶藥列舉出來:

000=0
001=1
010=2
011=3
100=4
101=5
110=6
111=7

因爲只能進行一次操作,所以我們會把藥進行混合

混合方式:

第一位爲1的4瓶藥進行混合;

第二位爲1的4瓶藥進行混合;

第三位爲1的4瓶藥進行混合;

然後讓三隻老鼠分別喝三瓶藥,死的那隻哪一位記爲1。我們就可以得到一個三位的二進制數

(比如第一隻和第三隻死掉,我們記爲101,通過101可以鎖定毒藥在第五瓶),就可以明白毒藥的位置了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章