從1000瓶酒中找出1瓶毒酒是一道著名的面試題,原題如下:某酒主人要宴請客人,他共有1000瓶酒,其中1瓶有毒。一旦喝了毒酒後,會在一天後發作,現在如果我們用小白鼠進行檢測,問一天內最少需要多少只小白鼠才可以檢測出哪瓶有毒?
此題的常規思路是10只老鼠按從左到右的順序一字排好,每桶酒也編上號1到1000,並把編號轉換成二進位制形式(也就是只有0和1的二進位制,但是為了方便,每個二進位制都寫滿10位,不夠十位數的前面添0補滿(比如1100110就寫成0001100110),數字和老鼠的位置一一對應,把酒給相應位置上是1的老鼠喝(每一桶都要喝)。最後按死掉的老鼠是哪幾隻,然後排成二進位制,再轉成十進位制就是第幾桶酒。比如:第70桶酒,70轉換成二進位制就是0001000110,那麼就給第
四、八、九隻老鼠喝。如果最後死掉第
三、七、八隻老鼠,那麼就是0010001100,轉換成十進位制就是140,即140桶酒有毒。理論上這10只老鼠可以檢測1024桶酒。
不過我們也可以選擇使用二分法,當然常規的二分法是無法在一天內解決的,因此我們需要使用並行的二分法,下面是我用python寫的乙個程式
x=
int(
input
('請輸入哪瓶酒有毒:'))
if x%2in
range(1
,2):
print
("1dead"
)else
:print
("1alive"
)if x%4in
range(1
,3):
print
("2dead"
)else
:print
("2alive"
)if x%8in
range(1
,5):
print
("3dead"
)else
:print
("3alive"
)if x%
16in
range(1
,9):
print
("4dead"
)else
:print
("4alive"
)if x%
32in
range(1
,17):
print
("5dead"
)else
:print
("5alive"
)if x%
64in
range(1
,33):
print
("6dead"
)else
:print
("6alive"
)if x%
128in
range(1
,65):
print
("7dead"
)else
:print
("7alive"
)if x%
250in
range(1
,126):
print
("8dead"
)else
:print
("8alive"
)if x%
500in
range(1
,251):
print
("9dead"
)else
:print
("9alive"
)if x%
1000
inrange(1
,501):
print
("10dead"
)else
:print
("10alive"
)
只需要觀察哪些老鼠死去,便可知道是哪瓶酒出了問題。 C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python二分法查詢 Python 二分法查詢
二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...
二分法的使用
在看二分查詢之前,需要先強調一下,陣列和函式等價,即f x 等價於num x 都是對映關係,根據乙個x值可以得到唯一乙個函式值。這裡的函式不僅指數學函式,也值自定義的表現為y f x 的函式。二分查詢通常用來處理函式值單調,且容易判斷的問題。例如在有序陣列中查詢值。無論什麼形式的二分,整體思想都是將...