0

逆方向にインクリメントして、配列内の値のすべての組み合わせを調べたい。
それでは、配列を用意しましょう

    int array[10] = {0,0,0,0,0,0,0,0,0,0};

このようにインクリメントしたい: {0,0,0,0,0,0,0,0,0,1} > {0,0,0,0,0,0,0,0,0,2 }...{p-1,p-1,p-1,p-1,p-1,p-1,p-1,p-1,p-1,p-1}.

より小さな配列の例では、p=3 : {0,0,0}>{0,0,1}>{0,0,2}>{0,1,0}>{0,1,1}>{ 0,1,2}...{2,2,2}

sizeof(int)*m1<=m<=10 の場合、配列は大きくなる可能性があります。

誰かがそのためのアルゴリズムを手伝ってくれますか?

編集:申し訳ありませんが、これを忘れていました..
混乱して申し訳ありませんが、もう1つ条件があります..

その配列はその形式にはなりません。この例のようなものになります

    int array[10] = {0,0,0,0,0,0,0,0,0,0};
    int help[10] = {3,4,0,1,0,0,3,0,1,0};

そして、配列[help[]!=0]の値の組み合わせを取得したい、この場合は配列[0]、配列[1]、配列[3]、配列[6]、配列[8]なので->

    int array[10] = {0,0,0,0,0,0,0,0,0,0};
    int array[10] = {0,0,0,0,0,0,0,0,1,0};
    int array[10] = {0,0,0,0,0,0,0,0,2,0};
    int array[10] = {0,0,0,0,0,0,1,0,0,0};
    int array[10] = {0,0,0,0,0,0,1,0,1,0};
    int array[10] = {2,2,0,2,0,0,2,0,2,0};     

p=3
そのような for() サイクルは i=0,1,3,6,8 になり、値は i=help[i]!=0 です。

4

3 に答える 3

2

次に例を示します。

void increment(int array[], size_t size, int limit)
{
     do
     {
         if (++array[--size] != limit)
         {
             break;
         }
         array[size] = 0; // value overflow
     }
     while (size);
}

使用法:

int array[10];
memset(array, 0, sizeof(array));

increment(array, 10, 3);

編集:フィルター付きアルゴリズム

void increment(int array[], int filter[], size_t size, int limit)
{
     do
     {
         if (!filter[--size])
         {
             // skip this position
             continue;
         }
         if (++array[size] != limit)
         {
             break;
         }
         array[size] = 0; // value overflow
     }
     while (size);
}
于 2013-03-22T14:03:22.757 に答える
1

配列を逆方向にインクリメントすることから、ベース(n)番号に1を追加することまで、質問が少し変わったことがわかります...それは別の問題です。

int base = 3;

for( int i = (sizeof( array ) / sizeof( array[0] ))-1; i >= 0; )
{
    if( ++array[i] < base )
        break;
    else
        array[i--] = 0;
}
于 2013-03-22T13:59:14.753 に答える
0

これは、ベースp + 1で、0から(p + 1)^arrayLengthまでの自然数を単純にインクリメントすることと同じです。

あなたの例では、

for (long i=0; i<4^10; i++)
{
   convert i to string in base (p+1), left- padding with 0s
   convert characters in string to comma separated array format and print 
}
于 2013-03-22T14:02:21.323 に答える