所谓“螺旋方阵”,是指对任意给定的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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
- #include
- int main(int argc, char *argv[])
- {
- int n;
- scanf("%d", &n); //不要管忘记 &
- int helix[n][n];
-
- enum {left = -1, x0, right} x;
- x = right;
- enum {down = -1, y0, up} y;
- y = y0;
- int cnt = 1, p = 0, q = 0;
- int i, j;
-
- while(cnt <= n*n){
- if(x == right && y == y0){
- for(j=q; j<(n-1)-q; j++)
- helix[p][j] = cnt++;
-
- x = x0;
- y = down;
- }
- if(y == down && x == x0){
- for(i=p; i<(n-1)-p; i++)
- helix[i][(n-1)-q] = cnt++;
-
- y = y0;
- x = left;
- }
- if(x == left && y == y0){
- for(j=(n-1)-q; j>=q; j--)
- helix[(n-1)-p][j] = cnt++;
- p++;
-
- x = x0;
- y = up;
- }
- if(y == up && x == x0){
- for(i=(n-1)-p; i>=p; i--)
- helix[i][q] = cnt++;
- q++;
-
- y = y0;
- x = right;
- }
- }
-
- for(i=0; i<=(n-1); i++){ //遍历输出
- for(j=0; j<=(n-1); j++)
- printf("%3d", helix[i][j]);
- printf("\n");
- }
-
- return 0;
- }