(蓝桥杯)
程序设计(满分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"); } }