1 条题解
-
0
自动搬运
来自洛谷,原作者为

ZYX0716
**搬运于
2025-08-24 21:17:47,当前版本为作者最后更新于2025-06-14 10:50:24,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目大意:
请你用 到 之间的整数,依次填充一个 的方阵。由题目中给出的两张模板方阵得知,我们需要从外到内顺序填入数字。
将第 幅图简单整理得出的 规律模板 :
不同颜色代表每轮循环的目的。大家看蓝色部分,当已经填入了 个数时要及时停止,意味着每填入一个数都要进行判断。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
- 上传者