7-8 螺旋方阵 (20分)
程序员文章站
2022-03-13 13:47:10
...
7-8 螺旋方阵 (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
思路:每一行(列)写入该有的个数减去一后的个数,这样循环一轮右下左上正刚好是一圈,需要转n/2圈,如果n是奇数,中间会少一个,最后要补上。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n][n];
int k=1;
for(int i=0;i<=n/2;++i){ //要转n/2圈
int x=i,y=i;
for( ;y<n-i-1;++y,++k){ //行向右
a[x][y]=k;
}
for( ;x<n-i-1;++x,++k){ //列向下
a[x][y]=k;
}
for( ;y>i;++k,--y){ //行向左
a[x][y]=k;
}
for( ;x>i;++k,--x){ //列向上
a[x][y]=k;
}
}
if(n%2==1) a[n/2][n/2]=n*n; //奇数补孔
for(int x=0;x<n;++x){
for(int y=0;y<n;++y){
printf("%3d",a[x][y]);
}
printf("\n");
}
return 0;
}
提交结果:
上一篇: 基础编程题目集 6-10 阶乘计算升级版 (20分)
下一篇: LeetCode刷题日记-持续更新中