专栏文章

题解:B4199 [常州市赛 2020] 旋转数塔

B4199题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mip3fytx
此快照首次捕获于
2025/12/03 05:32
3 个月前
此快照最后确认于
2025/12/03 05:32
3 个月前
查看原文
螺旋方阵前记得把蛇形方阵做了。

题目大意:

请你用 11n×nn \times n 之间的整数,依次填充一个 n×nn \times n 的方阵。由题目中给出的两张模板方阵得知,我们需要从外到内顺序填入数字。
将第 22 幅图简单整理得出的 规律模板 不同颜色代表每轮循环的目的。大家看蓝色部分,当已经填入了 n×nn \times n 个数时要及时停止,意味着每填入一个数都要进行判断。

Code:

CPP
#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 条评论,欢迎与作者交流。

正在加载评论...