10只老鼠與1000瓶葯水


題目:1000 瓶無色無味的葯水,其中有一瓶毒葯,10只小白鼠拿過來做實驗。喝了無毒的葯水第二天沒事兒,喝了有毒的葯水后第二天會死亡。如何在一天之內(第二天)找出這瓶有毒的葯水?

思路:10只小白鼠,喝了葯水之后第二天只有存在和掛掉兩種情況,我們用計算機二進制里面的0和1來進行模擬,1代表喝、0代表不喝。

【 二進制映射喝法:0000000001對應十進制編號第1瓶葯水 】

【 二進制映射喝法:0000000010對應十進制編號第2瓶葯水 】

【 二進制映射喝法:0000000011對應十進制編號第3瓶葯水 】

【 二進制映射喝法:0000000100對應十進制編號第4瓶葯水 】

【 二進制映射喝法:0000000101對應十進制編號第5瓶葯水 】

【 二進制映射喝法:0000000110對應十進制編號第6瓶葯水 】

【 二進制映射喝法:0000000111對應十進制編號第7瓶葯水 】

【 二進制映射喝法:0000001000對應十進制編號第8瓶葯水 】

【 二進制映射喝法:0000001001對應十進制編號第9瓶葯水 】

【 二進制映射喝法:0000001010對應十進制編號第10瓶葯水 】

【 二進制映射喝法:0000001011對應十進制編號第11瓶葯水 】

【 二進制映射喝法:0000001100對應十進制編號第12瓶葯水 】

【 二進制映射喝法:0000001101對應十進制編號第13瓶葯水 】

····至

【 二進制映射喝法:1111100111對應十進制編號第999瓶葯水 】

【 二進制映射喝法:1111101000對應十進制編號第1000瓶葯水 】

然后,我們把1000瓶葯水編號,讓10只小白鼠用以上的1000種喝法喝下葯水。然后第二天通過觀察小白鼠的存活情況,就可以判斷出是第幾瓶葯水是有毒的。(小白鼠也需要編號,我們需要明白同樣是死了一只小白鼠,第一只掛掉和第十只掛掉是不一樣的。)

以上摘自(點擊打開鏈接


這是我昨晚在微信上看到的一條面試題,當時看答案我都看了好一會才完全看懂。

問題最主要的是兩個方面:十只小白鼠要怎么喝?怎么判定哪一瓶是毒葯?

后來拿去考了一下室友,剛看到答案也是好像立馬懂了,但具體問他小白鼠怎么喝時 邏輯便亂了,顯然還沒有完全弄明白。上面的答案你看明白了嗎?你能清晰的解釋這十只小白鼠要怎么喝這1000瓶葯水嗎?例如剛開始的時候,哪只老鼠喝哪瓶?




其實舉具體的例子是理解答案、理解代碼最好的方法。

我們把1000瓶葯水從1~1000編號,並用二進制表示。十位二進制數對應十只小白鼠,我們對小白鼠從左往右編號1~10。

喝法:第一瓶葯水:10號老鼠喝,其它不喝。

      第二瓶葯水:9號老鼠喝,其它不喝。

      第三瓶葯水:9號和10號老鼠喝,其它不喝。

      第四瓶葯水:8號老鼠喝,其它不喝。

      第五瓶葯水:8號和10號老鼠喝,其它不喝。

      第六瓶葯水:8號和9號老鼠喝,其它不喝

      ……

      ……

      (二進制的每位對應十只小白鼠,1表示喝,0表示不喝。二進制換算成十進制則對應的是第幾瓶葯水)

結果:假如第十瓶(0000001010)是毒葯。二進制0000001010表示7號和9號老鼠喝過,第二天肯定只有這兩只老鼠死了。











免責聲明!

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



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