【分形】POJ_2083 Fractal

题意

画图。
一级图:

二级图:
x x
 x
x x
三级图:
x x   x x
 x     x
x x   x x
   x x
    x
   x x
x x   x x
 x     x
x x   x x
以此类推,给出一个n,画出n级图。

思路

我们可以发现这些图都是正方形,所以我们可以打出最大的图,然后按边长输出就好了。

代码

#include<cstdio>
int n,f[8]={0,1};
bool a[8][788][788];
inline void init() {
    a[1][1][1]='X';
    for (int i=2;i<=7;i++) f[i]=f[i-1]*3;//预处理每级图的边长
    for (int t=1;t<=7;t++) {//打出最大的图
        for (int i=1;i<=f[t-1];i++)
            for (int j=1;j<=f[t-1];j++) {
                a[t][i][j]=a[t-1][i][j];
                a[t][i][j+f[t-1]*2]=a[t-1][i][j];
                a[t][i+f[t-1]][j+f[t-1]]=a[t-1][i][j];
                a[t][i+f[t-1]*2][j]=a[t-1][i][j];
                a[t][i+f[t-1]*2][j+f[t-1]*2]=a[t-1][i][j];
            }
    }
}
inline void print(int x) {
    for (int i=1;i<=f[x];i++) {//按边长输出
        for (int j=1;j<=f[x];j++)
            putchar(32+56*a[x][i][j]);
        printf("\n");
    }
    printf("-\n");
}
int main() {
    init();
    while (scanf("%d",&n),n!=-1) print(n);
}

猜你喜欢

转载自blog.csdn.net/SSL_hzb/article/details/81771650