0

数値 N と配列 ? 次の例のように、配列間で N を分散する方法:

N = 5 およびサイズ 4 の配列。

[5,0,0,0]
[0,5,0,0]
[0,0,5,0]
[0,0,0,5]
[4,1,0,0]
[4,0,1,0]
[4,0,0,1]
[1,4,0,0]
[0,4,1,0]
[0,4,0,1]
[1,0,4,0]
[0,1,4,0]
[0,0,4,1]
.
..
..
[2,1,2,0]
..
..
...

等々

重要なことは、配列全体の合計が N であることです!

山登りアルゴリズムを実装したいので、すべての後継者を生成したいので、山登りはリストから選択できます。

4

1 に答える 1

0

再帰が嫌いな場合や長い配列がある場合は、再帰を使用するか使用しないでください。あなたはarrに記入したいです。先頭 (0..index-1) を埋めて、配列の末尾を残りの N で埋めたいとします。

呼び出し (arr の長さは 5): fill(arr, 5, 0);

private static void fill(int[] arr, int N, int index) {
    if (arr == null) {
        return;
    }
    if (N == 0) {
        for (; index < arr.length; index++) {
            arr[index] = 0;
        }
    } else if (index == arr.length - 1) {
        arr[index] = N;
    } else {
        for (int j = N; j >= 0; j--) {
            arr[index] = j;
            fill(arr, N - j, index + 1);
        }
    }

    if (index >= arr.length - 1) {
        // use your array
        System.out.println(Arrays.toString(arr));
    }
}
于 2013-04-13T21:04:29.493 に答える