1

サイズ n の配列を取り、位置 x の数値が x+1 以上である最大サイズまでの整数値のすべての可能な組み合わせを生成するアルゴリズムを作成しようとしています。

したがって、サイズ 4 で最大 5 の配列の場合:

{0, 0, 0, 0}
{4, 3, 2, 1}
{2, 2, 0, 0}
{5, 5, 5, 5}

すべて許容値です。

{0, 1, 2, 3}
{0, 3, 0, 0}
{6, 6, 6, 6}

無効です。

サイズが 4 で最大値が 1 の配列の場合、これは可能なすべての組み合わせになります。

{0, 0, 0, 0}
{1, 0, 0, 0}
{1, 1, 0, 0}
{1, 1, 1, 0}
{1, 1, 1, 1}

maxの任意の値に対してそれを実装する方法について頭を悩ませることができないようです。だから私はあなたに手を貸してくれるかどうかあなたたちに尋ねています:D

これらのシリーズに名前はありますか?

4

3 に答える 3

1

私はそれを解決しました、再帰は必要ありません。

私が尋ねた質問に対する答えを探している他の人のために答えを投稿しています。

public static void next(int[] data)
{
    final int arrayLen = data.length;
    int lowestIndex = 0;
    int lowestValue = data[0];

    for (int i = 1; i < arrayLen; i++)
    {
        if (data[i] < lowestValue)
        {
            lowestValue = data[i];
            lowestIndex = i;
        }
    }

    data[lowestIndex]++;

    for (int j = lowestIndex + 1; j < arrayLen; j++)
    {
        data[j] = 0;
    }
}

配列全体を反復処理し、最小値の最初の出現を見つけます。その値は 1 ずつ増分され、それ以降のすべての値がゼロにリセットされます。

于 2010-12-31T01:00:12.283 に答える
0

どこに問題がありますか?ヒント: 再帰はあなたの味方です (ネスト レベルが実行時にのみ決定されるネストされたループに再帰を使用できます)。

于 2010-12-27T05:38:45.427 に答える
0

n と max を取り、一連の配列を返すサブルーチンを用意します。

n > 1 の場合、代わりに n-1 を使用して自身を再帰的に呼び出し、再帰呼び出しが返す結果ごとに、前の左端の要素と最大値の間で変化する追加の左端の要素を持つ 1 つ以上の配列を生成します。

n が 1 の場合、0 から max までの値を含む max+1 個の 1 要素配列を返します。

于 2010-12-27T05:41:15.227 に答える