按规则填充2D数组

时间:2013-01-08 14:30:57

标签: c arrays matrix

如何填充这样的数组:

  

1 2 3 4
  2 3 4 3
  3 4 3 2
  4 3 2 1

我需要找出一个确定填充此数组的模式的公式。

#include <stdio.h>
#define N 4

int main()
{
int i,j,arr[N][N];
int a=1;
for(i=0;i<N;i++)
    for(j=0;j<N;j++)
    {
        arr[j][i]=i+j+1;
    }
for(i=0; i < N; i++)

    for(j=0;j<N;j++)
        printf("%2i ",arr[j][i]);
        printf("\n"); 


 return 0;
}

它打印出与所需数组类似,只是我在第二行的末尾需要“3”,然后在它之后反转。请解释一下如何做到这一点。

2 个答案:

答案 0 :(得分:1)

试试这个:

    arr[j][i]=N-abs(i+j-(N-1));
只要您需要一个围绕某个值镜像的数字序列,就可以使用

abs()。您只需要减去一个常量,使您想要镜像的值为零,取绝对值,然后重新调整输出。

在你的情况下(N = 4),(i+j)求和产生:0,1,2,3,4,5,6。中间值为N-1,最大值为2 *(N-1)。

减去N-1(3)得到:-3,-2,-1,0,1,2,3。

abs()给出:3,2,1,0,1,2,3。

如果我们从N(4)中减去它,我们得到所需的1,2,3,4,3,2,1序列。

答案 1 :(得分:0)

arr[j][i]=(j * 3 + j/ 3 + b) % N + 1;