有888瓶编了号码的水及10只健康的小白鼠,其中一瓶水有毒,小白鼠饮用毒水一天后会死,最少需要几天可以找到哪瓶水有毒?
十个列表,每个小白鼠一个
a = []
b = []
c = []
d = []
e = []
f = []
g = []
h = []
i = []
j = []
#888瓶水标签0-889
li = list(range(1, 889))
取出一瓶水,把标签十进制数字转化为二进制
for x in li:
# 定义一个空列表,存储每次二进制数,存进列表里的二进制数是字符格式的
li1 = []
er = bin(x)
# print (er)
for y in er:
if y == b:
continue
else:
li1.append(y)
# 把li1列表里的元素顺序反向排列
list.reverse(li1)
# print (li1)
# 计算li1列表里元素个数,根据元素个数生成一个列表,每次从li1里拿元素用
n = list(range(len(li1)))
# print (n)
for y in n:
# print (y)
# print (li1[y])
# print (x)
# print (type(li1[y]))
# li1这个二进制列表里拿一个数,这个数为1的时候,就是把原十进制数对应水编号给y小白鼠喝
if li1[y] == ‘1’:
# print (x)
# print (type(y))
# print (y)
if y == 0:
# print (y)
a.append(x)
elif y == 1:
# print (y)
b.append(x)
elif y == 2:
c.append(x)
elif y == 3:
d.append(x)
elif y == 4:
e.append(x)
elif y == 5:
f.append(x)
elif y == 6:
g.append(x)
elif y == 7:
h.append(x)
elif y == 8:
i.append(x)
else:
j.append(x)
# else:
# continue
print(“888瓶水打上标签,经过下面计算,每只小白鼠喝下下面计算的混合液。”)
print(“第一只小白鼠喝下水瓶标签:”, a)
print(“第二只小白鼠喝下水瓶标签:”, b)
print(“第三只小白鼠喝下水瓶标签:”, c)
print(“第四只小白鼠喝下水瓶标签:”, d)
print(“第五只小白鼠喝下水瓶标签:”, e)
print(“第六只小白鼠喝下水瓶标签:”, f)
print(“第七只小白鼠喝下水瓶标签:”, g)
print(“第八只小白鼠喝下水瓶标签:”, h)
print(“第九只小白鼠喝下水瓶标签:”, i)
print(“第十只小白鼠喝下水瓶标签:”, j)
print(“如果第一只,第三只,第五只小白鼠死了,就是0b0000010101(二进制数,转化为十进制数是21),第21瓶水有毒。”)
888瓶水打上标签,经过下面计算,每只小白鼠喝下下面计算的混合液。
如果第一只,第三只,第五只小白鼠死了,就是0b0000010101(二进制数,转化为十进制数是21),第21瓶水有毒。