-4

该代码应该编写一个 Java 程序,该程序从标准输入中读取一个正整数列表,并确定它们中的任何一个是否可以写为其他输入整数的子集的总和。提示:搜索加起来为某个值的整数子集最好递归完成。但是,请避免生成所有子集。当您搜索总和为 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
            }
        }
    }
}
4

5 回答 5

1

我认为错误必须在这里:

else if(number - integers[i] < 0)
{
return //this is the problem
}
}

所以在like;之后加一个分号returnreturn;

为什么要integers在 main 方法中第二次初始化数组:
integers = new int[1000];
这是多余的。

于 2013-02-08T05:19:04.807 回答
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;
            }
        }
    }
于 2013-02-08T05:20:01.470 回答
1

你的问题在这里,你没有分号后return声明:

else if(number - integers[i] < 0)
{
return  //No Semicolon
}
于 2013-02-08T05:20:09.303 回答
1

排队:49

而不是return, return;- 缺失;

于 2013-02-08T05:21:48.003 回答
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;
            }
        }
    }
}
于 2013-02-08T05:20:34.197 回答