【发布时间】:2020-05-08 20:06:36
【问题描述】:
我有这段代码显示输出达到目标数,例如目标 =1590,但它似乎没有考虑到达到目标数的 3 倍数
import java.util.ArrayList;
import java.util.Arrays;
class SumSet {
static void sum_up_recursive(ArrayList<Integer> numbers, int target, ArrayList<Integer> partial) {
int s = 0;
for (int x: partial) s += x;
if (s == target)
System.out.println("sum("+Arrays.toString(partial.toArray())+")="+target);
if (s >= target)
return;
for(int i=0;i<numbers.size();i++) {
ArrayList<Integer> remaining = new ArrayList<Integer>();
int n = numbers.get(i);
for (int j=i+1; j<numbers.size();j++) remaining.add(numbers.get(j));
ArrayList<Integer> partial_rec = new ArrayList<Integer>(partial);
partial_rec.add(n);
sum_up_recursive(remaining,target,partial_rec);
}
}
static void sum_up(ArrayList<Integer> numbers, int target) {
sum_up_recursive(numbers,target,new ArrayList<Integer>());
}
public static void main(String args[]) {
Integer[] numbers = {431, 431, 429, 427, 424, 422, 420, 418, 416, 414, 412,
409, 407, 405, 403, 401, 398, 396, 394, 392, 389, 409, 347, 347, 344, 344, 342, 342,
339, 342, 344, 347, 349, 352, 354, 357, 359, 361, 364, 364, 364, 364, 431, 451, 449, 447,
445, 443, 441, 439, 437, 435, 433, 431, 429, 427, 424, 422, 420, 418, 416, 414, 412};
int target = 1590;
sum_up(new ArrayList<Integer>(Arrays.asList(numbers)),target);
}
}
对于示例输出,sum([431, 424, 396, 339])=1590 但它不考虑像这些 [424, 392, 392, 392] 和 =1590 这样的 3x 组合
我将如何重新计算元素以达到目标数量?
【问题讨论】:
-
numbers和target修复了吗?你能假设每个有效的解决方案正好包含 4 个数字吗?还是您打算稍后再概括? -
欢迎来到 SO!你可以重复使用数字吗?除了迈克尔的问题之外,这里似乎还需要一个更清晰的规范。有没有理由缩小你的代码?很难按书面形式阅读。感谢您的澄清。
-
谢谢,是的,只要达到目标数字,您就可以重复使用这些数字。只要达到目标,它的可能输出可以包含少于或多于 4 个数字。
标签: java recursion arraylist integer