1 条题解

  • 0
    @ 2025-8-24 21:17:48

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ZYX0716
    **

    搬运于2025-08-24 21:17:47,当前版本为作者最后更新于2025-06-14 10:50:24,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    螺旋方阵前记得把蛇形方阵做了。

    题目大意:

    请你用 11n×nn \times n 之间的整数,依次填充一个 n×nn \times n 的方阵。由题目中给出的两张模板方阵得知,我们需要从外到内顺序填入数字。

    将第 22 幅图简单整理得出的 规律模板 不同颜色代表每轮循环的目的。大家看蓝色部分,当已经填入了 n×nn \times n 个数时要及时停止,意味着每填入一个数都要进行判断。

    Code:

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,a[55][55],x=1,y,k;
    int main(){
    	//可自行添加快读。
    	cin>>n;
    	m=n;
    	while(k<n*n){//按照规律进行填充即可。
    		while(y<m && k<n*n)a[x][++y]=++k;
    		while(x<m && k<n*n)a[++x][y]=++k;
    		while(y>n-m+1 && k<n*n)a[x][--y]=++k;
    		while(x>n-m+2 && k<n*n)a[--x][y]=++k;
    		if(k<n*n)a[x][++y]=++k;
    		while(x<m-1 && k<n*n)a[++x][y]=++k;
    		while(y<m-1 && k<n*n)a[x][++y]=++k;
    		while(x>n-m+2 && k<n*n)a[--x][y]=++k;
    		while(y>n-m+3 && k<n*n)a[x][--y]=++k;
    		if(k<n*n)a[++x][y]=++k;
    		m-=2;//本次循环填了2层。
    	}for(int i=1;i<=n;i++){//输出方阵。
    		for(int j=1;j<=n;j++){
    			cout<<a[i][j]<<" ";
    		}
    		cout<<"\n";
    	}
    	return 0;//好习惯。
    }
    
    • 1

    信息

    ID
    6657
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者