递推递归练习O - 螺旋方阵

题目简要:

Description

n×n的螺旋方阵当n=5和n=3时分别是如下的形式 

  
请给出一个程序,对于任意的输入n(0<n<11),输出按照上面规律所获得的n×n的螺旋方阵。

Input

输入第一行为整数m(0<m<10),代表有m组输入; 
接下来是m行数据,每行输入一个n(0<n<11)。

Output

按照输入的次序,依次输出每一个n×n方阵(一个方阵的同一行数据之间以'\t'分隔) 
两个输出方阵之间输出一个空行。

Sample Input

1
4

Sample Output

1   2   3   4
12  13   14   5
11  16   15   6
10   9    8   7

解题思路:

这道题就是要按照图示的样例输出就好了,我的思路可能有些麻烦,我用循环写了一圈,最后输出·····

附代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t,n,r=1,i,j;
	while(cin>>t)
	{
		while(cin>>n)
		{
			int a[n+1][n+1];
			int x=1,y=1,b=n,c=n,p=1;
			while(1)
			{
			   for(j=x;j<=b;j++)
			   {
				   a[y][j]=p;
				   p++;
				   if(p>n*n)
		           break;
			   }
			   if(p>n*n)
		       break;
		       y++;
		       for(i=y;i<=c;i++)
		       {
		       	   a[i][b]=p;
		       	   p++;
		       	   if(p>n*n)
		           break;
			   }
			   if(p>n*n)
		       break;
		       b--;
		       for(j=b;j>=x;j--)
		       {
		       	   a[c][j]=p;
		       	   p++;
		       	   if(p>n*n)
		           break;
			   }
			   if(p>n*n)
		       break;
		       c--;
		       for(i=c;i>=y;i--)
		       {
		       	   a[i][x]=p;
		       	   p++;
		       	   if(p>n*n)
		           break;
			   }
			   if(p>n*n)
		       break;
		       x++;
		    }
            for(i=1;i<=n;i++)
            {
    	        for(j=1;j<=n;j++)
    	        {
    		        if(j==n&&i!=n)
    		        cout<<a[i][j]<<endl;
    		        else
    		        if(j==n&&i==n)
    		        cout<<a[i][j]<<endl<<endl;
    		        else
    		        cout<<a[i][j]<<'\t';
		        } 
	        }
		if(r==t)
		break;
		r++;
	    }
    }
    return 0;
}
解题感受:

这道题唯一的难点就在于在写那一圈循环的时候逻辑一定要清晰,不然很容易写乱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值