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

Deer_Peach
Huh?||潜水ing~||私信前请看注意事项搬运于
2025-08-24 21:16:03,当前版本为作者最后更新于2024-03-15 19:10:48,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
纯模拟:
第一步:
把一填进第一行中央:
int x=0,y=n/2; a[x][y]=1;第二步:
需要变横、纵坐标:
int tx=(x+n-1)%n;//上次填数位置横轴变化 int ty=(y+1)%n;//上次填数位置纵轴变化第三步:
第二步填数失败:
tx=(x+1)%n;//上次填数位置横轴变化 ty=y;//上次填数位置纵轴不变最后:
结合代码:
#include<bits/stdc++.h> using namespace std; int n; int a[25][25]; int main(){ cin>>n;//输入 int x=0,y=n/2;//初始坐标 a[x][y]=1;//第一步操作:第一行中间填1 for(int cnt=2;cnt<=n*n;cnt++){//重复第二步和第三步操作 int tx=(x+n-1)%n;//上次填数位置横轴变化 int ty=(y+1)%n;//上次填数位置纵轴变化 if(a[tx][ty]==0){//第二步填数成功 a[tx][ty]=cnt;//填数 }else{//第二步没成功做第三步操作 tx=(x+1)%n;//上次填数位置横轴变化 ty=y;//上次填数位置纵轴不变 a[tx][y]=cnt;//填数 } x=tx;//更新横轴 y=ty;//更新纵轴 } for(int i=0;i<n;i++){//输出 for(int j=0;j<n;j++){ cout<<a[i][j]<<" "; } cout<<endl; } return 0;//结束 }
- 1
信息
- ID
- 9869
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者