递推递归练习O

来源:互联网 发布:易语言创建sql数据库 编辑:程序博客网 时间:2024/06/05 19:53

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

这道题要求将从1到N*N螺旋输出到N*N的矩阵里;

思路如下:

1.建立二维数组存储数字;

2.找到四种扫描方式以达到螺旋保存的目的,即向右,向下,向左,向上的顺序;

3.以存储到N*N为结束,最后逐行输出就好;


代码如下:

#include<bits/stdc++.h>using namespace std;int main(){        int t,n,i,j,a[15][15],b;        cin>>t;        int x=0,y=0;        while(cin>>n)        {                memset(a,0,sizeof(a));   //每次输入后要重置数组                a[0][0]=1;  //便于后面存储                b=1;                x=0,y=0;                while(b<n*n)    //四种扫描方式,螺旋储存                {                        while(y+1<n&&a[x][y+1]==0)                                a[x][++y]=++b;                        while(x+1<n&&a[x+1][y]==0)                                a[++x][y]=++b;                        while(y>0&&a[x][y-1]==0)                                a[x][--y] =++b;                        while(x>0&&a[x-1][y]==0)                                a[--x][y] =++b;                }                for(i=0;i<n;i++)                {                        for(j=0;j<n;j++)                        {                                if(j==n-1)                                        cout<<a[i][j]<<endl ;                                else                                        cout<<a[i][j]<<'\t';   //记得数和数之间有一个\t                        }                }                cout<<endl;                t--;                if(t==0)                        break;        }}


0 0
原创粉丝点击