在6x6对称二维阵列中转换3x3二维阵列

时间:2013-05-17 14:11:51

标签: c arrays

我正在尝试解决一项需要的练习:

- 随机填充3x3二维数组

- 将数组转换为维度为6x6的第二个数组:

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;

}

3 个答案:

答案 0 :(得分:1)

以下几点可以帮助您到达目的地:

  • 你正在制作一个三乘三阵列的四个副本。
    • 您需要一个嵌套的for循环来迭代原始数组
    • 在for循环中,您将进行四次分配,每份一份
  • 每个副本都有不同的位置
    • 制作副本时,需要为每个索引添加偏移量
    • 最好只使用左上角值的索引
  • 每份副本都朝不同的方向发展
    • 每当维度进入错误的维度时,您只需减去索引
    • 即可

还有别的吗?

答案 1 :(得分: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--;
    }
}

答案 2 :(得分:0)

for (i = 0; i < DIM*2; i++){
    for (j = 0; j < DIM*2; j++){
        b[i][j]=a[i-(i>=DIM)*((i-DIM)*2+1)][j-(j>=DIM)*((j-DIM)*2+1)];
    }
}