-12

2n3だとしましょう。

出力は次のようになります。

[2, 0, 0][0, 2, 0][0, 0, 2][1, 1, 0][1, 0, 1][1, 0, 1][0, 1, 1]

n2の場合、出力は次のようになります。

[2, 0][0, 2][1, 1]

さて、再帰を使用してメソッドを作成しようとしましたが、ほとんど成功しました。

これが方法です。

public static void divideANumberIntoNNumbers(int number, int n) {
    try {
        for (int i = number; i >= 0; --i) {
            System.out.print(i + " ");
            int x = n - 1;
            if (x > 0) {
                divideANumberIntoNNumbers(number - i, x);
            } else {
                return;
            }
        }
    } finally {
        System.out.println();
    }
}

以下は私が得た出力です。

number = 4 および n = 2 の場合:

4 0
3 1
2 2
1 3
0 4

number = 4 および n = 3 の場合:

4 0 0
3 1 0
0 1
2 2 0
1 1
0 2
1 3 0
2 1
1 2
0 3
0 4 0
3 1
2 2
1 3
0 4

2 番目の出力で、強調表示された部分が表示される場合、順列はおよび2 2 0です。2 1 12 0 2

順列をデータ構造に格納できるように、メソッドにどのような変更を加える必要があるかを知りたいList<List<Integer>>

4

2 に答える 2

1

宿題の答えをやみくもに教えずに、再帰的な方法を使用してこれを行うことをお勧めします。基本的に、合計するすべての整数のすべての組み合わせが必要なので、5,3 は次のようになると想定できます。

? + 5
? + 4
? + 3
? + 2
? + 1
? + 0

どこ ?元の合計 (5) から右側を引いた値になります。? を再帰します。それらすべての組み合わせを考え出します。

于 2013-09-20T20:16:06.813 に答える
-4
if (n == 2) {
    System.out.println("[2, 0][0, 2][1, 1]");
  }
else if (n==3) {
    System.out.println("[2, 0, 0][0, 2, 0][0, 0, 2][1, 1, 0][1, 0, 1][1, 0, 1][0, 1, 1]");
  }

しかし、これがあなたの宿題の解決策になるとは思いません!

于 2013-09-06T10:55:58.703 に答える