因此,对于我的编码类(用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;
}输出:
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不应该是:
int dirs[4][2] = {
{1, 0},
{0, -1},
{-1, 0},
{0, 1}
};发布于 2021-02-20 00:15:31
(0,1)表示从y=0列移动到y=1列,从而向右移动(ryyker的注释启发了这一点)。
https://stackoverflow.com/questions/66280530
复制相似问题