首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中数组要遵循的方向集

C语言中数组要遵循的方向集
EN

Stack Overflow用户
提问于 2021-02-19 23:36:16
回答 1查看 58关注 0票数 0

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

过了一段时间,得到了一个解决方案,其中的各层重复了每个圆圈的指令集,我们得到了这个程序:

代码语言:javascript
复制
#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;
}

输出:

代码语言:javascript
复制
Final map is: 
   1    2    3    4 
  12    1    2    5 
  11    4    3    6 
  10    9    8    7 

Process finished with exit code 0

但我不明白为什么我们把假设的最后一个指令{0,1} (意思是向上1个元素并停留在所说的列上)作为第一个指令,考虑到我们从1开始计数,并通过重复{0,1}指令N层*2-1次来结束于4(如果是n=4,在第一层中是3)。

dirs不应该是:

代码语言:javascript
复制
 int dirs[4][2] = {
          
           {1, 0},
           {0, -1},
           {-1, 0},
           {0, 1}
    };
EN

回答 1

Stack Overflow用户

发布于 2021-02-20 00:15:31

(0,1)表示从y=0列移动到y=1列,从而向右移动(ryyker的注释启发了这一点)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66280530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档