7-5 螺旋方阵
所谓“螺旋方阵”,是指对任意给定的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 <stdio.h>
int main(){
int n,i,j,k=1; // 初始化变量n, i, j, k
scanf("%d",&n); // 从用户那里获取一个整数n
int a[n][n]; // 创建一个n x n的二维数组a
int x=n/2; // 计算中间列的索引
int count = 0; // 初始化计数器count
while(x!=0){ // 当x不等于0时,执行循环
for(j=count;j<n-count;j++,k++){ // 向右填充数组
a[count][j]=k;
}
for(i=count+1,j--;i<n-count;i++,k++){ // 向下填充数组
a[i][j]=k;
}
for(i--,j--;j>=count;j--,k++){ // 向左填充数组
a[i][j]=k;
}
for(i=i-1,j=j+1;i>count;i--,k++){ // 向上填充数组
a[i][j]=k;
}
x--; // 更新x的值
count++; // 更新计数器count的值
}
if(n%2!=0){ // 如果n是奇数
a[n/2][n/2]=k; // 将中心元素设置为k
}
for(i=0;i<n;i++){ // 遍历数组的每一行
for(j=0;j<n;j++){ // 遍历数组的每一列
printf("%3d",a[i][j]); // 打印数组的元素
}
printf("\n"); // 换行
}
}