1

如何填充这样的数组:

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”,在那之后,它会反转。请解释一下我该怎么做。

4

2 回答 2

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 序列。

于 2013-01-08T14:35:01.903 回答
0
arr[j][i]=(j * 3 + j/ 3 + b) % N + 1;
于 2013-01-08T14:49:48.820 回答