代码应该编写一个Java程序,它从标准输入中读取正整数列表,并确定是否可以将其中任何一个写为其他输入整数的子集之和。提示:搜索加起来为某个值的整数子集最好以递归方式完成。但是,请避免生成所有子集。当您使用sum x搜索子集时,不必考虑大于x的输入整数。如果y≤x是其他输入整数之一,则对总和为x的子集的搜索可以分为在包含y的子集和不包含y的子集之间进行搜索。
import java.util.Scanner;
import java.util.Arrays;
public class jodiejo {
public static int[] integers = new int[1000];
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int n = 0;
integers = new int[1000];
while (scan.hasNextInt()) {
integers[n] = scan.nextInt();
n++;
}
for (int i = 0; i < n; i++) {
searchSum(integers[i], i);
}
System.out.print("NO");
Arrays.sort(integers, 0, n);
}
public static void searchSum(int number, int position) {
for (int i = position - 1; i >= 0; i--) {
if (number - integers[i] == 0) {
System.out.print("YES");
System.exit(0);
} else if (number - integers[i] > 0) {
searchSum(number - integers[i], i);
} else if (number - integers[i] < 0) {
return
}
}
}
}
答案 0 :(得分:1)
我认为错误必须在这里:
else if(number - integers[i] < 0)
{
return //this is the problem
}
}
所以只需在;
return
之后放置一个分号return;
为什么要在main方法中第二次初始化integers
数组:
integers = new int[1000];
这是多余的。
答案 1 :(得分:1)
在最后一次返回后你需要一个分号,即:
public static void searchSum(int number, int position) {
for (int i = position - 1; i >= 0; i--) {
if (number - integers[i] == 0) {
System.out.print("YES");
System.exit(0);
} else if (number - integers[i] > 0) {
searchSum(number - integers[i], i);
} else if (number - integers[i] < 0) {
return;
}
}
}
答案 2 :(得分:1)
你的问题在这里,你在return
陈述之后没有分号:
else if(number - integers[i] < 0)
{
return //No Semicolon
}
答案 3 :(得分:1)
排队:49
而不是return
,return;
- 缺少;
答案 4 :(得分:0)
import java.util.Scanner;
import java.util.Arrays;
public class jodiejo
{
public static int[] integers = new int[1000];
public static void main(String args[])
{
Scanner scan = new Scanner(System.in);
int n = 0;
integers = new int[1000];
while (scan.hasNextInt())
{
integers[n] = scan.nextInt();
n++;
}
for (int i = 0; i < n; i++)
{
searchSum(integers[i], i);
}
System.out.print("NO");
Arrays.sort(integers, 0, n);
}
public static void searchSum(int number,
int position)
{
for (int i = position - 1; i >= 0; i--)
{
if (number - integers[i] == 0)
{
System.out.print("YES");
System.exit(0);
}
else if (number - integers[i] > 0)
{
searchSum(number - integers[i], i);
}
else if (number - integers[i] < 0)
{
return;
}
}
}
}