有15瓶可乐,其中只有一瓶过期了,小白鼠喝之后两个小时会死。
请问最少用多少只小白鼠,在2小时内一定可以找出有毒的可乐?
答案:2的4次方大于15,故使用4只小白鼠就可以测出来。
解析:15瓶汽水从0001-1111进行编号,让第一只老鼠喝(从右到左)第一个位置为0的可乐,即编号为(2, 4, 6, 8, 10, 12, 14)的可乐;第二只喝第二个位置为0的可乐,即编号为(1, 4, 5, 8, 9, 12, 13)的可乐;第三只喝第三个位置为0的可乐,即编号为(1, 2, 3, 8, 9, 10, 11)的可乐;第四只喝第二个位置为0的可乐,即编号为(1, 2, 3, 4, 5, 6, 7)的可乐。
# 位运算
def calVal(val, num):
# 与运算
res = val & num
return res
def main():
list1 = []
list2 = []
list3 = []
list4 = []
for val in range(1, 16):
v1 = calVal(val, 1) #从右往左判断第一个值为0的
v2 = calVal(val, 2) #判断第二个值为0的
v3 = calVal(val, 4) #判断第三个值为0的
v4 = calVal(val, 8) #判断第四个值为0的
if v1 == 0:
list1.append(val)
if v2 == 0:
list2.append(val)
if v3 == 0:
list3.append(val)
if v4 == 0:
list4.append(val)
print('list1 = ', list1)
print('list2 = ', list2)
print('list3 = ', list3)
print('list4 = ', list4)
if __name__ == '__main__':
main()
运算结果如下:
可根据编号的老鼠的死亡得出结果。若全都存活,则为15号可乐过期。