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