(蓝桥杯)
程序设计(满分15分)
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
#include <cstdio>
using namespace std;
int main(){
int str[22][22]={0}; //建立一个矩阵能够把要求的矩阵包含在内,并四周留出一行
int n;
scanf("%d",&n);
for(int i=1;i<=n; ++i)
for(int j=1; j<=n; ++j)
str[i][j]=-1; //把可以填入的矩阵位置标志为-1
int nn=n*n;
int k=1; //k为方向标志,1为——>;2为上下;3为<——;4为下上;
int i=1,j=1;
for(int t=1; t<=nn;++t){
if(k==1){
if(str[i][j]==-1)
str[i][j++]=t;
else{
k=2;++i;--j; //可以填入的位置都填满时需要改变方向
}
}
if(k==2){
if (str[i][j]==-1)
str[i++][j]=t;
else{
k=3;--i;--j;
}
}
if (k==3){
if (str[i][j]==-1)
str[i][j--]=t;
else{
k=4;--i;++j;
}
}
if (k==4){
if (str[i][j]==-1)
str[i--][j]=t;
else{
k=1;++i;++j;--t;//这一轮循环t没有可填入的位置,--t使t在下一循环中保持原值
}
}
}
for(int i=1; i <= n; ++i){
for(int j=1; j <= n;++j)
printf("%-6d",str[i][j]); //按规格打印
printf("\n");
}
}