题解 | #数组分组#
数组分组
http://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
from itertools import combinations
while True:
try:
n=int(input())
l=input().split()
L = []
for i in l:
L.append(int(i))
def f(n,L):
sum3 = 0
sum5 = 0
l35=[]
if sum(L)%2!=0:
print('false')
return False
for i in L:
if i%3==0:
sum3+=i
elif i%5==0:
sum5+=i
else:
if (abs(sum3-sum5)+sum(l35))%2==1:
print('false')
return False
else:
for i in range(len(l35)+1):
for j in combinations(l35,i):
if sum(j)==summ:
print('true')
return True
print('false')
return False
f(n,L)
except:
break
while True:
try:
n=int(input())
l=input().split()
L = []
for i in l:
L.append(int(i))
def f(n,L):
sum3 = 0
sum5 = 0
l35=[]
if sum(L)%2!=0:
print('false')
return False
for i in L:
if i%3==0:
sum3+=i
elif i%5==0:
sum5+=i
else:
l35.append(i)
#通过计算,不满足被3、5整除的数组的子集要满足和为summ:1.当summ是小数则不存在该子集 2.当summ为整数,则遍历所有组合求和,满足一个就跳出循环
summ=(abs(sum3-sum5)+sum(l35))/2if (abs(sum3-sum5)+sum(l35))%2==1:
print('false')
return False
else:
for i in range(len(l35)+1):
for j in combinations(l35,i):
if sum(j)==summ:
print('true')
return True
print('false')
return False
f(n,L)
except:
break

