参考代码:

首先定义数组 输入格数

#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.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论