练习是一个简单的挑战性Java程序。输入包含:
最正确的算法是打印正确的顺序,即添加阵列A中的所有元素以达到最终总和,即“最终总和”,这样我们就可以避免求和到数组B中的任何值。
Inputs: (split to three lines for clarity)
1.
3 //n, the size of the array
2 4 6 //array a of size n
4 8 //array b of size n-1
//finalsum = 2 + 4 + 6 = 12. Similarly for the 2nd input
Output: 0 1 2 (or) 2 1 0 is also correct
but 1 0 2 is wrong because it cannot add up to 4, since 4 is present in the array b
2.
20
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
209 208 207 206 205 204 203 202 201 200 199 198 197 196 195 194 193 192 191
Output: 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (or) many other ways too
答案 0 :(得分:1)
您的算法可能如下所示:
A
B
B
,请跳至A
B
中,则递归以从A
中选择下一个元素(删除当前元素)。A
中的所有元素时,返回索引作为解决方案备份堆栈。A
的所有元素都已经过测试而没有解决方案,那么 AND 我们目前处于递归堆栈的最高级别,然后得出结论,没有解决方案。这些步骤中的大多数应该相对简单易行。
答案 1 :(得分:0)
为什么我们不能使用所有排列算法的修改形式,其中检查每个步骤中的总和。如果当前总和等于B中的任何元素(为此我们可以使用哈希映射),那么不要继续进行其他操作。
希望我很清楚。
感谢。