一脸懵,求dalao帮一下~
查看原帖
一脸懵,求dalao帮一下~
439126
xuyuanchen楼主2021/4/1 20:16
#include<bits/stdc++.h>//万能头文件
using namespace std;
long long a[40][40];//a数组(这里定义的是long long类型,int也行)
int main()
{
    long long n,x=1,y;//这里可以用int
    cin>>n;//输入n
    n=2*n-1;//根据题目要求,求出n=2*n-1(如果不先给n赋一个新值那么后面的for就不能进行)
    //因为后面用的n都是2*n-1,所以输入完事就赋一个新值
    for(int i=1;i<=n;i++)//将a数组清零,而且,把n重新赋值完的,否则这里面的n指的不是2*n-1
    {
        for(int j=1;j<=n;j++)
        {
            a[i][j]=0;//可以了,清零了
        }
    }
    y=(n+1)/2;//给y赋值
    a[x][y]=1;//根据题目要求,第一行的中间,一定是一
    for(int i=2;i<=n*n;i++)//开始循环
    {
        if(x==1&&y==n){x++;}//判断如果在右上角(第一行最右面)
        else//还有3种
        {
            if(x==1){x=n;y++;}//判断如果在第一行
            else//还有2种
            {
                if(y==n){y=1;x--;}//判断如果在最后一行
                else//最后一种
                {
                    if(a[x-1][y+1]>0){x++;}//其他情况?还有呢
                    else{x--;y++;}
                }
            }
        }
        a[x][y]=i;//最后应该=i
    }
    for(int i=1;i<=n;i++)//双重循环输出
    {
        for(int j=1;j<=n;j++)//因为不是每个数占一行,所以不换行
        {
            cout<<a[i][j]<<" ";//输出并空格
        }
        cout<<endl;//每一行一定要换行
    }
    return 0;//结束
}

2021/4/1 20:16
加载中...