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

来源:互联网 发布:摄像头美化软件 编辑:程序博客网 时间:2024/05/21 11:36

题目简述:

给定一数字,写出其螺旋矩阵,例如:

5

1    2   3    4   5

16 17 18 19  6 

15 24 25 20  7

14 23 22 21  8

13 12 11 10  9.

解题思路:

用二维数组是肯定的了。

开始考虑用循环解决问题,但是考虑用循环会不会太麻烦,但是最后还是用了循环没有想到别的好办法。

用循环就是写出最外圈的程序,然后往里进行循环就是了。

源代码:

#include<iostream>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 a1=1,b1=1,a2=n,b2=n,p=1;            while(1)            {                for(j=a1;j<=a2;j++)                {                    a[b1][j]=p;                    p++;                    if(p>n*n)                        break;                }                if(p>n*n)                    break;                b1++;                for(i=b1;i<=b2;i++)                {                    a[i][a2]=p;                    p++;                    if(p>n*n)                        break;                }                if(p>n*n)                    break;                a2--;                for(j=a2;j>=a1;j--)                {                    a[b2][j]=p;                    p++;                    if(p>n*n)                        break;                }                if(p>n*n)                    break;                b2--;                for(i=b2;i>=b1;i--)                {                    a[i][a1]=p;                    p++;                    if(p>n*n)                        break;                }                if(p>n*n)                    break;                a1++;            }            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;}

 

 

0 0
原创粉丝点击