1.首先计算3,5倍数的差值,如果3的倍数为+,那么5的倍数为-,反之亦然。把结果放入set{}集合中
2.分别取剩余数值,与之前结果计算,每个数值都可以为+或者-,那么把+,-的结果均放入集合中
3.全部计算完成后,如果0值在结果里,则返回true,否则返回false
while True:
try:
length = int(input())
num_list = list(map(int, input().strip().split()))
res = 0
# 计算初始3,5倍数的差值
for _ in range(length):
i = num_list.pop(0)
if i % 3 == 0:
res += i
elif i % 5 == 0:
res -= i
else:
num_list.append(i)
res = {res}
# 结果计算,把之前结果,分别计算当前值的+和- 2种情况,然后把结果再放回去,给下一次计算
while num_list:
i = num_list.pop(0)
res_plus = [x + i for x in res]
res_plus.extend([x - i * 2 for x in res_plus])
res = set(res_plus)
# 最后如果0值在结果中,表示可以算出,如果不在则不行
if 0 in res:
print('true')
else:
print('false')
except:
break



京公网安备 11010502036488号