1. 程式人生 > >小白鼠試毒模擬

小白鼠試毒模擬

"""
1000 個瓶子,其中一瓶是毒藥其餘為水,小白鼠飲用毒藥後會在第二天死亡
最少需要多少隻小白鼠才可以在第二天知道那瓶是毒藥?
採用點陣圖 + 位運算的方式進行狀態判斷,複雜度 O(log2 N )
"""
import random

bottles = {x: 0 for x in range(1000)}
poison = random.randint(0, 999)
bottles[poison] = 1
print("隨機生產的一瓶毒藥:{}".format(poison))

mice = [1 << x for x in range(10)]
result = []
for m in
mice: r = 0 # 0 活著, 1死了 choose = filter(lambda x: x & m, bottles.keys()) # 選擇小白鼠去試毒的瓶子 for bottle in choose: r |= bottles[bottle] # 試毒過程 if r: # 死了,換下一隻接著試 break result.append(r) # 二進位制轉十進位制 temp = '0b' + ''.join(str(i) for i in result[::-1]) print("計算出第{}瓶為毒藥"
.format(int(temp, 2)))