社区讨论
站外题,悬关
题目总版参与者 3已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @lo1qfpcq
- 此快照首次捕获于
- 2023/10/23 01:18 2 年前
- 此快照最后确认于
- 2023/11/03 01:57 2 年前
描述
输入n打印回形方阵。
输入描述
一个整数n (0 < n < 20)
输出描述
一个方阵,每个数字用空格隔开
用例输入 1
4用例输出 1
4 4 4 4 4 4 4 4 44 3 3 3 3 3 3 3 44 3 2 2 2 2 2 3 44 3 2 1 1 1 2 3 44 3 2 1 0 1 2 3 44 3 2 1 1 1 2 3 44 3 2 2 2 2 2 3 44 3 3 3 3 3 3 3 44 4 4 4 4 4 4 4 4代码:
CPP#include<bits/stdc++.h>
using namespace std;
int n,d,cnt;
int a[50][50];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
void f(int x,int y,int z){
a[x][y]=d;
if((n*2+1)*(n*2+1)==z) return ;
int xx=x+dx[cnt];
int yy=y+dy[cnt];
if(a[xx][yy]==0&&xx>=1&&xx<=n*2+1&&yy>=1&&yy<=n*2+1){
f(xx,yy,z+1);
}else{
if((cnt+1)%4==0) d--;
cnt=(cnt+1)%4;
xx=x+dx[cnt];
yy=y+dy[cnt];
f(xx,yy,z+1);
}
}
int main(){
cin>>n;
d=n;
f(1,1,1);
for(int i=1;i<=n*2;++i){
for(int j=1;j<=n*2;++j) printf("%d",a[i][j]);
cout<<endl;
}
return 0;
}
回复
共 11 条回复,欢迎继续交流。
正在加载回复...