题目
所谓“螺旋矩阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。
格式
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占4位。
样例
输入样例:
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>
int main() {
int n;
scanf("%d", &n);
int matrix[n][n];
int num = 1;
int row_start = 0;
int row_end = n - 1;
int col_start = 0;
int col_end = n - 1;
while (row_start <= row_end && col_start <= col_end) {
for (int col = col_start; col <= col_end && num <= n * n; col++) {
matrix[row_start][col] = num++;
}
row_start++;
for (int row = row_start; row <= row_end && num <= n * n; row++) {
matrix[row][col_end] = num++;
}
col_end--;
for (int col = col_end; col >= col_start && num <= n * n; col--) {
matrix[row_end][col] = num++;
}
row_end--;
for (int row = row_end; row >= row_start && num <= n * n; row--) {
matrix[row][col_start] = num++;
}
col_start++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%4d", matrix[i][j]);
}
printf("\n");
}
return 0;
}