【分形】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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章