貌似只有一解 [1800, 1250, 6900, 720, 3080]
随机算法,一般500次计算就出结果了(看运气,最好11次出),速度快。
def sum2():
lt = [460, 588, 720, 1250, 1800, 2200, 3080, 4100, 4375, 5184, 6510, 6900, 9000]
n = random.randint(2,13)
ltResult = []
total = 0
for i in range(0,n):
m = random.randint(0,len(lt)-1)
ltResult.append(lt[m])
total += lt[m]
lt.remove(lt[m])
if(total>=13750):
break
if(total==13750):
return ltResult
else:
return []
for i in range(0,10000):
re = sum2()
if(len(re)>0):
print re
break
else:
print '%s# failed' % i
还有一种就是死算,2的13次求和,13个循环,有点恐怖。
每个数只能用一次,你这个问题估计Bill Joy也解决不了。更别说我们了。
解决思路:
1:求出数组长度len
2:int n=1时,判断是否有值等于13750的,
2: n=2时,判断是否有两个数相加的值等于13750的。
3: n=3.....
4:当n=len时,就是所有数相加是否等于13750,这是本人思路,供参考
类似冒泡法,嘿嘿
楼主是在知道数组里面是这些数的情况下吗?