1 条题解

  • 1
    @ 2023-1-28 12:31:37

    按题意模拟即可。 对应:

    1. 洛谷题目
    2. 铁一oiClass
    3. 一本通
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    int main()
    {
    	int n,a[40][40],x[1600],y[1600],num;//坐标记录
    	memset(a,0,sizeof(a));//重置
    	scanf("%d",&n);
    	if(n==1)//特殊判断
    	{
    		printf("1\n");
    		return 0;
    	}
    	a[1][(n/2)+1]=1;
    	x[1]=1;//行
    	y[1]=(n/2)+1;//列
    	for(num=2;num<=n*n;num=num+1)
    	{
    		if((x[num-1]==1)&&(y[num-1]!=n))//按题意判断
    		{
    			x[num]=n;
    			y[num]=y[num-1]+1;
    		}
    		else if((y[num-1]==n)&&(x[num-1]!=1))
    		{
    			x[num]=x[num-1]-1;
    			y[num]=1;
    		}
    		else if((y[num-1]==n)&&(x[num-1]==1))
    		{
    			y[num]=y[num-1];
    			x[num]=x[num-1]+1;
    		}
    		else if(a[x[num-1]-1][y[num-1]+1]==0)
    		{
    			x[num]=x[num-1]-1;
    			y[num]=y[num-1]+1;
    		}
    		else
    		{
    			y[num]=y[num-1];
    			x[num]=x[num-1]+1;
    		}
    		a[x[num]][y[num]]=num;//存入数字
    	}
    	for(int i=1;i<=n;i=i+1)//输出
    	{
    		for(int j=1;j<=n;j=j+1)printf("%d ",a[i][j]);
    		printf("\n");
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    752
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    9
    已通过
    6
    上传者