1209. 回形方阵
问题描述
输入 n 打印回形方阵。
输入
一个整数 n ( 0<n<10)
输出
一个方阵,每个数字的场宽为 2
样例
输入
8
输出
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 7 6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 7 6 5 5 5 5 5 5 5 5 5 5 5 6 7 8 8 7 6 5 4 4 4 4 4 4 4 4 4 5 6 7 8 8 7 6 5 4 3 3 3 3 3 3 3 4 5 6 7 8 8 7 6 5 4 3 2 2 2 2 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 1 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 1 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 2 2 2 2 3 4 5 6 7 8 8 7 6 5 4 3 3 3 3 3 3 3 4 5 6 7 8 8 7 6 5 4 4 4 4 4 4 4 4 4 5 6 7 8 8 7 6 5 5 5 5 5 5 5 5 5 5 5 6 7 8 8 7 6 6 6 6 6 6 6 6 6 6 6 6 6 7 8 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
这里我用的语言是 C++。
首先来看一下题目和样例:
题目十分简洁,通过样例可以知道矩阵中心为0,而矩阵最外一圈则为n,一共要输出一个宽和长都为2n-1的方阵。并且每个数字的场宽为 2!!!
好,题目看完,看标签是递归,那我们今天就用递归来做。
(递归用函数来做,一般是函数长,主程序短)
代码:
#include<bits/stdc++.h>
using namespace std;
int a[105][105]={},i,j,n;
//这个整个名叫sh函数的作用就是用来给a[105][105]这个数组赋值,方便以后输出。
int sh(int s,int d,int x,int y){
if(d==4){
d=d%4;
s--;
}
a[x][y]=s;
if(s==0){
return 0;
}
else{
if(d==0){
if(y+1<=2*n+1&&a[x][y+1]==0){
sh(s,d,x,y+1);//在自己的程序里面调用自己,就叫做递归。
}
else{
sh(s,d+1,x+1,y);
}
}
else{
if(d==1){
if(x+1<=2*n+1&&a[x+1][y]==0){
sh(s,d,x+1,y);
}
else{
sh(s,d+1,x,y-1);
}
}
else{
if(d==2){
if(y-1>=1&&a[x][y-1]==0){
sh(s,d,x,y-1);
}
else{
sh(s,d+1,x-1,y);
}
}
else{
if(x-1>=1&&a[x-1][y]==0){
sh(s,d,x-1,y);
}
else{
sh(s,d+1,x,y+1);
}
}
}
}
}
}
int main(){
cin>>n;
sh(n,0,1,1);
for(i=1;i<=2*n+1;i++){
for(j=1;j<=2*n+1;j++){
cout<<setw(2)<<a[i][j];
//这个setw()就是用来设置场宽的,里面填几,后面输出的数字的场宽就是几,这里我们给它调成2。
}
cout<<"\n";
}
}
今天这道基础题也就那样,简简单单!有其他方法就要向其它大佬请教啦!
每一份点赞、收藏、关注、评论,都将是我更新动力,点赞、收藏、关注、评论加起来过30,下一次就还做关于递归的,难度可是会提升到提高哦!
标签:1209,递归,int,else,sh,回形,方阵,105 From: https://blog.csdn.net/yuanheng418/article/details/143493740