如何填充这样的数组:
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”,然后在它之后反转。请解释一下如何做到这一点。
答案 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;