杜轩旗


私信TA

用户名:dotcpp0653619

访问量:150

签 名:

等  级
排  名 1881
经  验 2584
参赛次数 19
文章发表 1
年  龄 0
在职情况 学生
学  校 铁人学校
专  业

  自我简介:

TA的其他文章

参考代码:

首先定义数组 输入格数

#include  <bits/stdc++.h>
using namespace std;
int a[1100][1100];
int main()
{
    int n;
    while(cin>>n)
    {
        xxxxxxx;
    }
    return 0;
}

定义x,y为要填充的坐标,

f为方向,i为要填充的数。

#include <bits/stdc++.h>
using namespace std;
int a[1100][1100];
int main()
{
    int n;
    while(cin>>n)
    {
        memset(a,0,sizeof a);
        int x,y,i=0,f=2/* 1:上  2:下  3:左  4:右 */;
        x=1;                   //x从第一行开始
        y=n;                   //y从最后一列开始
        while(1)
        {
            i++;               //依次填
            a[x][y]=i;
            if(i==n*n)         //如果全填完就结束循环
            {
                break;
            }
            if(f==1)
            {
                x-=1;
            }
            else if(f==2)
            {
                x+=1;
            }
            else if(f==3)
            {
                y-=1;
            }
            else if(f==4)
            {
                y+=1;
            }
            
        }
        for(int k=1; k<=n; k++)          //输出填的数
        {
            for(int j=1; j<=n; j++)
            {
                cout<<a[k][j]<<' ';
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}

如果上面碰边,右面也碰边

方向改为下,上边向下一格

如果右面碰边,下面也碰边

方向改为左,右边向左一格

......以此类推

#include <bits/stdc++.h>
using namespace std;
int a[1100][1100];
int main()
{
    int n;
    while(cin>>n)
    {
        memset(a,0,sizeof a);
        int x=1,y,i=0,f=2/*  1:上  2:下  3:左  4:右 */;
        y=n;
        int z1=1,z2=n,z3=1,z4=n;       //z1:上  z2:下  z3:左  z4:右(壁)
        while(1)
        {
            i++;
            a[x][y]=i;
            if(i==n*n)
            {
                break;
            }

            if(z1==x&&z4==y&&i!=1)
            {

                f=2;
                z1++;
            }
            else if(z4==y&&z2==x)
            {
                z4--;

                f=3;
            }
            else if(z2==x&&z3==y)
            {

                f=1;
                z2--;
            }
            else if(z3==y&&z1==x)
            {
                z3++;

                f=4;
            }
            if(f==1)
            {
                x-=1;
            }
            else if(f==2)
            {
                x+=1;
            }
            else if(f==3)
            {
                y-=1;
            }
            else if(f==4)
            {
                y+=1;
            }
        }
        for(int k=1; k<=n; k++)
        {
            for(int j=1; j<=n; j++)
            {
                cout<<a[k][j]<<' ';
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}

但这时运行

会出现以下情况



#include  <bits/stdc++.h>
using namespace std;
int a[1100][1100];
int main()
{
    int n;
    while(cin>>n)
    {
        memset(a,0,sizeof a);
        int x=1,y,i=0,f=2/*  1:上  2:下  3:左  4:右 */,b1=-1,b2=-1,b3=-1,b4=-1;
        y=n;
        int z1=1,z2=n,z3=1,z4=n;       //z1:上  z2:下  z3:左  z4:右
        while(1)
        {
            b1--;
            b2--;
            b3--;
            b4--;
            i++;
            a[x][y]=i;
            if(i==n*n)
            {
                break;
            }

            if(z1==x&&z4==y&&i!=1)
            {

                f=2;
                b1=2;
            }
            else if(z4==y&&z2==x)
            {
                b2=2;

                f=3;
            }
            else if(z2==x&&z3==y)
            {

                f=1;
                b3=2;
            }
            else if(z3==y&&z1==x)
            {
                b4=2;

                f=4;
            }
            if(f==1)
            {
                x-=1;
            }
            else if(f==2)
            {
                x+=1;
            }
            else if(f==3)
            {
                y-=1;
            }
            else if(f==4)
            {
                y+=1;
            }
            if(b1==0)
            {
                z1+=1;
            }
            else if(b2==0)
            {
                z4-=1;
            }
            else if(b3==0)
            {
                z2-=1;
            }
            else if(b4==0)
            {
                z3+=1;
            }

        }
        for(int k=1; k<=n; k++)
        {
            for(int j=1; j<=n; j++)
            {
                cout<<a[k][j]<<' ';
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}


 

0.0分

5 人评分

  评论区

  • «
  • »