1000瓶毒水的问题
生活随笔
收集整理的這篇文章主要介紹了
1000瓶毒水的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:現有1000瓶水其中有1瓶是有毒的,現在有n只小白鼠,小白鼠如果喝了毒水,會在21小時死亡,現在有24小時的時間,請問如何使用最少數目的小白鼠,在限定的時間內找到哪瓶水有毒?
解題思路:
1000<2^10=1024,我們對1000瓶水進行編號1~1000,選擇10只小白鼠標號為a0,a1,a2,...,a9;從而有將每瓶水的標號轉化成二進制數后,對應的二進制數的每一位都與一只小白鼠相對應。
順序掃描每瓶水,對于每瓶水根據其標號將其轉換成二進制數,根據白鼠和二進制每一位的對應情況,對于相應位為1的白鼠,我們讓其喝下當前檢驗的水,否則不做操作。例如:
對于10號瓶的水:
| a9 | a8 | a7 | a6 | a5 | a4 | a3 | a2 | a1 | a0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
這樣對于所有的1000瓶水掃描一遍之后,21小時后死去的白鼠,必定喝過有毒的那瓶水,也就意味著有毒的那瓶水的標號轉換成二進制后對應所有死去的小白鼠的位置上位1,其他位均為0,故而我們能唯一確定有毒的水的標號。
例如:
在對1000后瓶水都做了以上操作之后,a4、a3和a1死了,則有有毒水的標號轉換成二進制數后為0000011010=16+8+2=26即第26瓶水有毒。
總結
以上是生活随笔為你收集整理的1000瓶毒水的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 打印对象详细信息,php打印显示
- 下一篇: Python调用Matlab教程