前言:
我爲什麼會過來解這道數學題呢?我的腦回路大概是這樣的
讀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可以鎖定毒藥在第五瓶),就可以明白毒藥的位置了