7-18 螺旋方阵(20 分)
所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占3位。
输入样例:
5
输出样例:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
#include <stdio.h> #define maxn 10 int g[maxn + 1][maxn + 1]; enum direction{ Right, Down, Left, Up }; int main(void) { int n, nC; int i, j, count, x, y; int dctChange = 1; count = 1; x = y = 1; enum direction dct = Right; scanf("%d", &n); nC = n; for(i = 1; i <= n * n; ++i){ g[x][y] = i; ++count; switch(dct){ case Up: --x; break; case Down: ++x; break; case Left: --y; break; case Right: ++y; break; } if(count == nC){ count = 0; ++dct; ++dctChange; } if(dct == Up + 1) dct = 0; if(2 == dctChange){ --nC; dctChange = 0; } } for(i = 1; i <= n; ++i){ for(j = 1; j <= n; ++j) printf("%3d", g[i][j]); if(i != n) printf("\n"); } return 0; }
作者: C课程组
单位: 浙江大学
时间限制: 400ms
内存限制: 64MB
代码长度限制: 16KB