所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占3位。
思路:
1. 按→方向填充,当数组元素值不是-1时,切换方向到 ↓
2. 继续沿 ↓ 填充,当数组元素值不是-1时,切换方向为←
3. 继续沿←填充,当数组元素值不是-1时,切换方向为 ↑
4. 继续沿 ↑ 填充,当数组元素值不是-1时,切换方向为→(回到第1步)
#include<stdio.h> #include<math.h> #include<stdlib.h> #include<string.h> int main() { int n, a[15][15]/*={0}*/; memset(a, 0, sizeof(a));//a内所有元素变为0 scanf("%d", &n); int i = 1, j = 1, k = 1; while(k <= n * n) { while(j <= n) { if(!a[i][j]) a[i][j++] = k++; else break; } j--; i++; while(i <= n) { if(!a[i][j]) a[i++][j] = k++; else break; } i--; j--; while(j > 0) { if(!a[i][j]) a[i][j--] = k++; else break; } j++; i--; while(i > 0) { if(!a[i][j]) a[i--][j] = k++; else break; } i++; j++; } for(i = 1; i <= n; i++) { for(j = 1; j < n; j++) printf("%3d", a[i][j]); printf("%3d ", a[i][j]); } return 0; }