-4

このコードは、標準入力から正の整数のリストを読み取り、それらのいずれかが他の入力整数のサブセットの合計として記述できるかどうかを判別する Java プログラムを作成することになっています。ヒント: 特定の値になる整数のサブセットの検索は、再帰的に行うのが最適です。ただし、すべてのサブセットを生成することは避けてください。合計 x を使用してサブセットを検索する場合、x より大きい入力整数を考慮する必要はありません。y≤x が他の入力整数の 1 つである場合、合計が x になるサブセットの検索は、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
}
}

だから、好きな;後にセミコロンを置くだけですreturnreturn;

integersまた、メイン メソッド内で配列を 2 回目に初期化するのはなぜですか
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

の代わりにreturnreturn;- 欠落;

于 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 に答える