Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组在C中要遵循的方向集_Arrays_C_Shapes - Fatal编程技术网

Arrays 数组在C中要遵循的方向集

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},

因此,对于我的编码类(在C中),我们必须编写一个程序,以某种方式填充N>=4个元素的平方(从左到右,然后向下,然后从右到左向上,最后到达原点)

过了一会儿,我们得到了一个解决方案,每个圆都有一套重复的指令,我们得到了这个程序:

#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}
    };