递推递归练习 O

来源:互联网 发布:js调用高德地图api 编辑:程序博客网 时间:2024/06/05 17:48

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

14

Sample Output

1   2   3   412  13  14  511  16  15  610 9  8   7






代码:
#if 1
#include<bits/stdc++.h>
using namespace std;
int main()
{
 int m , a[20][20] ;
 cin>> m ;
int ax[]={0,1,0,-1} ,ay[] ={1,0,-1,0 } ; //控制方向
 
 
 
 while (m--)
 {
  int n;
  cin>>n;
  
  
      memset(a,0,sizeof(a)) ;
  
   int nx=0 , ny=0 ,x=0,y=0,k=0;
  
   for(int i=0 ;i<n*n ;i++)
   {
    a[x][y] =i+1 ;
    nx = x+ ax[k] ;
    ny= y+ay[k] ;
    
    if(nx==n||nx<0||ny==n||ny<0||a[nx][ny]!=0)
     {
         k=(k+1)%4 ;
      nx= x+ ax[k] ;
      ny =y +ay[k] ;
     }
    x= nx ; y=ny ;                   //确定 要去的 方向
    
   }
  
  
  for (int i=0 ;i< n ;i++)
  {
      for(int j=0 ;j< n ;j++)
    cout<< a[i][j] <<" \t" ;
    cout<<endl;
 }
  }
 
 
 
 }

 #endif










0 0
原创粉丝点击