https://www.acwing.com/problem/content/120/
先画出最大的图形,之后根据输入n来输出部分
通过递归画,递归到1层时先操作,之后找到递归到n-1层,用n-1层画n层在这里插入代码片
#include<iostream>
using namespace std;
const int N=1010;
char g[N][N];
void dfs(int n){
// cout<<nnn++<<endl;
if (n == 1)
{
g[0][0] = 'X';
return;
}
dfs(n-1);
int len = 1;
for (int i = 0; i < n - 2; i ++ ) len *= 3;
int sx[4] = {0, 1, 2, 2}, sy[4] = {2, 1, 0, 2};
for (int k = 0; k < 4; k ++ )
for (int i = 0; i < len; i ++ )
for (int j = 0; j < len; j ++ )
g[sx[k] * len + i][sy[k] * len + j] = g[i][j];
}
int main(){
dfs(7);
int n;
while(cin>>n,n!=-1){
int k=1;
while(--n) k*=3;
for(int i=0;i<k;i++){
for(int j=0;j<k;j++){
if(g[i][j]) cout<<g[i][j];
else cout<<' ';
}
cout<<endl;
}
cout<<'-'<<endl;
}
return 0;
}