2012-03-09 102 views
-1

假设数组为:[1,2,5,7,10,13,17,21],并且您必须找到总数等于31的5个数字。什么是算法?查找与给定总和相等的数组元素

+5

Um。背包问题。 NP完全问题。 – 2012-03-09 05:26:51

+1

这是一个问题?首先提到你尝试过什么。 – Rakesh 2012-03-09 05:26:52

+0

如果你不关心效率,也许只是蛮横的......? – Daniel 2012-03-09 05:28:25

回答

1

对于像您这样的小阵列,效率并不意味着太高。诀窍是让它快速。像这样的东西会起作用(用Matlab编写,但它可以相当容易地翻译成任何语言):

array=[1, 2, 5, 7, 10, 13, 17, 21]; 
sum_val=31; 

for a=1:(length(array)-4] 
for b=(a+1):(length(array)-3) 
for c=(b+1):(length(array)-2) 
for d=(c+1):(length(array)-1) 
for e=(d+1):(length(array)-0) 
if array(a)+array(b)+array(c)+array(d)+array(e)=sum_val 
fprintf("%i+%i+%i+%i+%i=%i",array(a),array(b),array(c),array(d),array(e),sum_val); 
end 
end 
end 
end 
end 
+0

感谢Pearsonartphoto,实际上这个小数组只是为了举一个例子.. :) – DarkKnight 2012-03-09 05:45:07

+0

@DarkKnight:我想到了很多...有很多优化可以完成,例如,如果你在sum_value之上,然后跳到下一个循环等,但这是一个开始。 – PearsonArtPhoto 2012-03-09 05:45:47

+1

@Pearsonartphoto:(+ 1)不是为了解决问题,而是为了你的照片......;)......真棒摄影...... :) – 2012-03-09 05:46:50

相关问题