c++顺时针螺旋方阵

题目:建立一个程序,输入整数N,生成并输出N行N列的顺时针螺旋方阵,如下图所示:

    

解答:这个题目属于编程类经常出现的二维数组基础题,本人作为初学者,自己做出了一套可能有点复杂的解法,欢迎大家讨论交流。

首先是设定基本情况,把第一个数字num[0][0]赋值为1;

int n;
	cout<<"请输入矩阵的大小:"<<endl;
	cin>>n;
	int num[N][N]={0};
	int i=0,j=0;
	num[0][0]=1;
for(;num[i][j]<n*n;)
	{		
		for(;j<n-1;){
			num[i][++j]=num[i][j-1]+1;
    /*这个if的作用是当撞到墙壁(出现定义过的),则退出循环,转换方向*/
			if(num[i][j+1]!=0)  
			break;
		}
    /*若达到末端,则退出循环*/
		if(num[i][j]==n*n)
		break;

		 for(;i<n-1;)
		{
			num[++i][j]=num[i-1][j]+1;
			if(num[i+1][j])
			break;
		}
    /*若达到末端,则退出循环*/	
		if(num[i][j]==n*n)
		break;

		for(;j>0;)
		{
			num[i][--j]=num[i][j+1]+1;
			if(num[i][j-1]!=0)
			break;
		}
    /*若达到末端,则退出循环*/
		if(num[i][j]==n*n)
		break;	

		for(;i>0;){
			num[--i][j]=num[i+1][j]+1;
			if(num[i-1][j]!=0)
			break;
		}
	}		

最后就是输出

for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			cout<<setw(5)<<num[i][j];		 
		}
		cout<<endl;
	}

代码执行后的效果如下图:

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值