誰能找出毒葯?


 

  今天,和一個朋友談論了一個有趣的問題:

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


  眨看之下,貌似:”有一堆砝碼,有一個不准,最少幾次稱量可以找出這個砝碼?“

  但這問題關鍵是:”你只有一次驗證答案的機會!“ 不管你采取什么措施,你只能揭曉答案一次。

  我是學計算機的,所以對數字比較敏感。210 = 1024!所以,我先假設有1024個瓶子,其中只有1瓶毒葯。

  1. 將1024分成兩個512,即512a和512b。從512a的各瓶中,各取1滴水,給1號小白鼠吃;

  2. 將兩個512分別分成兩個256,即,512a分成了256a、256b,並且512b也分成了256a、256b。從兩個256a中,照舊每瓶取一滴,給2號小白鼠吃;

  3. 同樣的道理,依次分為4個128a、128b,將a各取一滴,給3號小白鼠吃;

    8個64a、64b,將a各取一滴,給4號小白鼠吃;

    16個32a、32b,將a各取一滴,給5號小白鼠吃;

    32個16a、16b,將a各取一滴,給6號小白鼠吃;

    64個8a、8b,將a各取一滴,給7號小白鼠吃;

    128個4a、4b,將a各取一滴,給8號小白鼠吃;

    256個2a、2b,將a各取一滴,給9號小白鼠吃;

    512個1a、1b,將a各取一滴,給10號小白鼠吃;

  4. 現在,大功告成,坐等一周后的結果:

    若1死,則毒葯在512a中;否則,在512b中;

      若2死,則在256a中;否則,在256b中;同時,根據1的結果,可判定這個256來自512a還是512b;

        。。。

          最后,可以唯一地確定這個”1“來自哪里,也就確定了它是第幾瓶。


  若為1000瓶,則也是不斷划分,划分的時候,優先滿足2的整數次冪划分(如1000分為,512a和488b)。划分到后面還有點變化,有興趣的自己探討吧。


 

  我那同學,提出了一種更簡單明了的思路:

  1. 將所有瓶子編號,1、2、3、... 、1000;

  2. 將所有編號轉換成對應二進制數, 0000000001,0000000010,0000000011,...,1111101000;

  3. 給1號小白鼠吃所有二進制數最低位為1的葯,如,1、3、5、7、...

    給2號小白鼠吃所有二進制數中,次低位為1的葯,如,2、3、4、6、...

      。。。。

        給10號小白鼠,吃所有二進制數中,右數第10位為1的瓶子對應的葯,如,512、513、514、...

  4. 最后,根據死去的小白鼠就可以推斷出是哪瓶為毒葯,如,第2、4、7、9個小白鼠死了,那么對應的二進制數為0101001010,即,第660瓶為毒葯!


  這種問題,很可能成為IT公司的面試題。狹路相逢,我同學那種解法明顯已站在了制高點。汗顏~~~




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM