现在的位置: 首页 > 综合 > 正文

螺旋打印数字矩阵

2014年01月08日 ⁄ 综合 ⁄ 共 829字 ⁄ 字号 评论关闭

(蓝桥杯)

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

 

抱歉!评论已关闭.