Arrays 数组在C中要遵循的方向集
因此,对于我的编码类(在C中),我们必须编写一个程序,以某种方式填充N>=4个元素的平方(从左到右,然后向下,然后从右到左向上,最后到达原点) 过了一会儿,我们得到了一个解决方案,每个圆都有一套重复的指令,我们得到了这个程序:Arrays 数组在C中要遵循的方向集,arrays,c,shapes,Arrays,C,Shapes,因此,对于我的编码类(在C中),我们必须编写一个程序,以某种方式填充N>=4个元素的平方(从左到右,然后向下,然后从右到左向上,最后到达原点) 过了一会儿,我们得到了一个解决方案,每个圆都有一套重复的指令,我们得到了这个程序: #include <stdio.h> #define N 4 int main(void){ int map[N][N]; int dirs[4][2] = { {0, 1}, {1, 0},
#include <stdio.h>
#define N 4
int main(void){
int map[N][N];
int dirs[4][2] = {
{0, 1},
{1, 0},
{0, -1},
{-1, 0}
};
for (int layer=0; layer < (N+1)/2; layer++){
// for each layer the starting point is (layer, layer)
// for each layer and each direction the number of repeat is N - layer*2 -1
int x=layer, y=layer;
int number = 1;
map[x][y] = number; // in case of N is odd
for (int dir=0; dir < 4; dir ++){
for (int i=0; i<N-layer*2-1; i++){
map[x][y] = number;
number ++;
x = x + dirs[dir][0];
y = y + dirs[dir][1];
}
}
}
printf("Final map is: \n");
for (int i = 0; i < N; i++){
for (int j = 0; j < N; j++){
printf("%4d ", map[i][j]);
}
printf("\n");
}
return 0;
}
但是我不明白为什么我们把假定的最后一条指令{0,1}(意思是向上移动1个元素并停留在所述列上)作为第一条指令,考虑到我们从1开始计数,然后通过重复{0,1}指令N-layer*2-1次(如果N=4,则在第一层中重复3次)
dirs不应该是:
int dirs[4][2] = {
{1, 0},
{0, -1},
{-1, 0},
{0, 1}
};
(0,1)意味着从y=0列移动到y=1列,从而向右移动(Ryker的注释说明了这一点)。(0,1)意味着从y=0列移动到y=1列,从而向右移动(Ryker的注释说明了这一点)。“我们从1开始计数,最后到4…”
C
为int-map[N][N]建立索引代码>数组实际上从int-map[0][0]
到map[N-1][N-1]
。(这就是你的代码在这里所做的:for(inti=0;i
(同样适用于intdirs[4][2]
)是的,因此我们首先做“外部”层和“内部”层,从(1,1)开始,但从(0,0)开始计数)我们会向右走3次,这就是为什么我不明白为什么在数组dirs中第一个元素是{0,1}我现在明白了,谢谢!“我们从1开始计数,最后到4…”C
索引int-map[N][N];
数组实际上是从int-map[0][0]
到map[N-1][N-1]
。(这就是你的代码在这里所做的:for(inti=0;i
(同样适用于intdirs[4][2]
)是的,因此我们首先做“外部”层和“内部”层,从(1,1)开始,但从(0,0)开始计数)我们会向右走3次,这就是为什么我不明白为什么在数组dirs中第一个元素是{0,1}我现在明白了,谢谢!
int dirs[4][2] = {
{1, 0},
{0, -1},
{-1, 0},
{0, 1}
};