Java 查找等于给定和的数组元素

Java 查找等于给定和的数组元素,java,c++,algorithm,Java,C++,Algorithm,假设数组是:[1,2,5,7,10,13,17,21],你必须找到5个和等于31的数字。算法是什么?对于像您这样的小型阵列,效率并不意味着什么。诀窍是让它变快。类似的东西可以工作(用Matlab编写,但可以很容易地翻译成任何语言): 嗯。背包问题。NP-完全。这是一个问题吗?首先提到你已经尝试过的。如果你不关心效率,也许只是强行使用它…?NP完全意味着没有有效的解决方案——不是真的。你能做的最好的事情就是使用蛮力。嗯,我在考虑使用嵌套for循环来循环每个元素,并添加它们,将添加的输出存储在一个变

假设数组是:[1,2,5,7,10,13,17,21],你必须找到5个和等于31的数字。算法是什么?

对于像您这样的小型阵列,效率并不意味着什么。诀窍是让它变快。类似的东西可以工作(用Matlab编写,但可以很容易地翻译成任何语言):


嗯。背包问题。NP-完全。这是一个问题吗?首先提到你已经尝试过的。如果你不关心效率,也许只是强行使用它…?NP完全意味着没有有效的解决方案——不是真的。你能做的最好的事情就是使用蛮力。嗯,我在考虑使用嵌套for循环来循环每个元素,并添加它们,将添加的输出存储在一个变量中,然后检查它是否等于目标和。但这显然是不好的。所以,我在征求建议。谢谢Pearsonartphoto,实际上,这个小阵列只是为了举个例子:)@黑暗之夜:我也这么想。。。有相当多的优化是可以完成的,例如,如果你超过了sum_值,那么跳到下一个循环,等等。但这是一个开始。@Pearsonartphoto:(+1)不是用于解决方案,而是用于你的照片…)。。。很棒的摄影……)
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