0

以下を必要とする演習を解決しようとしています。

- 3x3 の 2 次元配列をランダムに埋める

- 次元が 6x6 の 2 番目の配列に配列を変換します。

1 2 3 1 2 3 3 2 1 

4 5 6 -> 4 5 6 6 5 4 

7 8 9 7 8 9 9 8 7

                   7 8 9 9 8 7

                   4 5 6 6 5 4

                   1 2 3 3 2 1

私はそれを機能させることができません.論理は正しいに違いないと思います.

#include <stdio.h>
#include <stdlib.h>

 #define DIM 3

int main()
{
int i, j, a[DIM][DIM],a1[DIM][DIM], a2[DIM][DIM], a3[DIM][DIM], b[2*DIM][2*DIM];
srand(time(NULL));

for (i = 0; i < DIM; i++)
{
    for (j = 0; j < DIM; j++)
    {
        a[i][j] = rand() % 10;
    }
}
for (i = 0; i < DIM; i++)
{
    for (j = 0; j < DIM; j++)
    {
    printf("%d ", a[i][j]);
    }
    printf("\n");
}

for (i = 0; i < DIM; i++)
{
    for (j = 0; j < DIM; j++)
    {
        a1[i][j] = a[i][DIM - 1 - j];
        a2[i][j] = a[DIM - 1 -j][j];
        a3[i][j] = a2[i][DIM - 1 - j];

        if(i < DIM && j < DIM)
            b[i][j] = a[i][j];
        if(i < DIM && j >= DIM)
            b[i][j] = a1[i][j];
        if(i >= DIM && j < DIM)
            b[i][j] = a2[i][j];
        if(i >= DIM && j >= DIM)
            b[i][j] = a3[i][j];
    }
}
for (i = 0; i < 2*DIM; i++)
{
    for (j = 0; j < 2*DIM; j++)
    {
    printf("%d ", b[i][j]);
    }
    printf("\n");
}

return 0;

}

4

3 に答える 3

1

行きたい場所にたどり着くのに役立ついくつかのポイントを次に示します。

  • 3 x 3 配列の 4 つのコピーを作成しています。
    • 元の配列を反復するには、ネストされた for ループが必要です
    • for ループ内では、コピーごとに 1 つずつ、合計 4 つの割り当てを行います。
  • 各コピーの場所は異なります
    • コピーを作成するときは、各インデックスにオフセットを追加する必要があります
    • これは、左上隅の値のインデックスを使用するのが最適です
  • 各コピーは異なる方向に進みます
    • 次元が間違った次元に入っているときはいつでも、単にインデックスを差し引くことができます

他に何か?

于 2013-05-17T14:22:05.537 に答える
0

例に示されているのと同じ方法で常に 6 X 6 行列を埋める場合は、次のコードを使用できます。

m=0;
fl1=0;
for (i = 0; i < 6; i++)
{
    n=0;
    fl2=0;
    for (j = 0; j < 6; j++)
    {
       b[i][j] = a[m][n];   
       if(n==3)
       {
          fl2=1;   
       }
       if(fl2==0)
       {
          n++;
       }
       else
       {
          n--;
       }
    }
    if(m==3)
    {
       fl1=1;
    }
    if(fl1==0)
    {
       m++;
    }
    else
    {
       m--;
    }
}
于 2013-05-17T14:30:30.053 に答える