大家好,又见面了,我是你们的朋友全栈君。
类似这样递归题目,一定要记住:当前图 <—— 上个图
所以 当前图 的参数 是由上个图决定的
#include<bits/stdc++.h>
using namespace std;
char book[750][750];
int num[8];
void fun(int n,int x,int y){
if(n==1){
return;
}
// 用 ‘X ’填充中心
int kk= (int)pow(3,n-2);
for(int i=0;i<kk;i++){
for(int j=0;j<kk;j++){
book[x+i][y+j]='X';
}
}
int tx=num[n-1]-num[n-2];
//遍历围绕的 8 个子图
fun(n-1,x-tx,y-tx);
fun(n-1,x-tx,y+kk-tx);
fun(n-1,x-tx,y+kk*2-tx);
fun(n-1,x-tx+kk,y-tx);
fun(n-1,x-tx+kk,y+kk*2-tx);
fun(n-1,x-tx+kk*2,y-tx);
fun(n-1,x-tx+kk*2,y+kk-tx);
fun(n-1,x-tx+kk*2,y+kk*2-tx);
}
int main(){
num[0]=2;
num[1]=3;
int n,k=2;
cin>>n;
memset(book, ' ', sizeof(book));
for(int i=2;i<=n;i++){
num[i]=num[i-1]+k;
k*=3;
}
// 用 ‘+ ’镶边
for(int i=1;i<=num[n];i++)
book[1][i]='+';
for(int i=1;i<=num[n];i++)
book[i][1]='+';
for(int i=1;i<=num[n];i++)
book[num[n]][i]='+';
for(int i=1;i<=num[n];i++)
book[i][num[n]]='+';
// 开始画图
fun(n,num[n-1],num[n-1]);
// 输出
for(int i=1;i<=num[n];i++){
for(int j=1;j<=num[n];j++){
cout<<book[i][j];
}
cout<<endl;
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158451.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...