您的位置:首页 > 其它

ACM(递归递推—O)

2017-03-31 20:57 225 查看
题目:输入一个n输出一个n*n的螺旋方阵     


解题思路:先定义一个数组,然后将数组赋值为0,用4个while循环来为数组赋值,定义一个add=1,然后元素通过++add为每个数组便利,当add==n*n时说明已经便利完成,否则继续赋值。

细节处理:利用while循环输入,然后通过数组是否为0,判断是否已经赋值了。

代码:#include<bits/stdc++.h>

using namespace std;

int main()

{

    int d;

    cin>>d;

while(d--)

{

        int add=1,i=0,j=0,n,a[12][12]={1};

        cin>>n;

        while(add<n*n)

        {

            while(j+1<n&&a[i][j+1]==0)

                a[i][++j]=++add;

            while(i+1<n&&a[i+1][j]==0)

                a[++i][j]=++add;

            while(j-1>=0&&a[i][j-1]==0)

                a[i][--j]=++add;

            while(i-1>=0&&a[i-1][j]==0)

                a[--i][j]=++add;

        }

        for(i=0;i<n;i++)

        {

            for(j=0;j<n;j++)

                {cout<<a[i][j];

                if(j==n-1)

                cout<<endl;

                else

                    cout<<'\t';

            }}

    cout<<endl;}

    return 0;

    }

感想:通过将数组初始化为0,然后判断元素是否为0来判断是否已赋值,这样会更加节省时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: