# 题意
每一级盒子有5个上一级盒子按以下方式排列
X X
X
X X
第一级只有一个,输入一个n,输出当前级的图形,
两个输出之间间隔一个 ' - '
# 题解
1级的边长为1,2级为3,3级为9,n级为3^(n-1)
可以预处理所有边长
递归从第n级开始,现将n-1,递归到零为第一级图形
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N=750; 5 int n; 6 int p[8]; 7 bool a[N][N]; 8 inline void fractal(int k,int x,int y){ 9 if(!k){ 10 a[x][y]=1; 11 return; 12 } 13 fractal(k - 1, x, y); 14 fractal(k - 1, x, y + 2 * p[k]); 15 fractal(k - 1, x + p[k], y + p[k]); 16 fractal(k - 1, x + 2 * p[k], y); 17 fractal(k - 1, x + 2 * p[k], y + 2 * p[k]); 18 } 19 inline void fractal(){ 20 fractal(n,1,1); 21 for(int i = 1; i <= p[n]; i++) { 22 for (int j = 1; j <= p[n]; j++) 23 putchar(a[i][j] ? 'X' : ' '); 24 puts(""); 25 } 26 puts("-"); 27 for(int i = 1; i <= p[n]; i++) 28 for (int j = 1; j <= p[n]; j++) 29 a[i][j]=0; 30 } 31 int main(){ 32 ios::sync_with_stdio(0); 33 cin.tie(0); 34 cout.tie(); 35 p[1]=1; 36 for(int i = 2; i <= 7; i++) 37 p[i] = p[i-1] * 3; 38 while(cin>>n&&n!=-1){ 39 fractal(); 40 } 41 }