专栏文章
题解:B4199 [常州市赛 2020] 旋转数塔
B4199题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mip3fytx
- 此快照首次捕获于
- 2025/12/03 05:32 3 个月前
- 此快照最后确认于
- 2025/12/03 05:32 3 个月前
题目大意:
请你用 到 之间的整数,依次填充一个 的方阵。由题目中给出的两张模板方阵得知,我们需要从外到内顺序填入数字。
将第 幅图简单整理得出的 规律模板 :
不同颜色代表每轮循环的目的。大家看蓝色部分,当已经填入了 个数时要及时停止,意味着每填入一个数都要进行判断。
不同颜色代表每轮循环的目的。大家看蓝色部分,当已经填入了 个数时要及时停止,意味着每填入一个数都要进行判断。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 条评论,欢迎与作者交流。
正在加载评论...