Fractal

# 题意
每一级盒子有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 }

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12417798.html