LOADING

加载过慢请开启缓存 浏览器默认开启

宝贝,生日快乐!!!LevOJ P1296 分形宇宙

2023/4/24

思路:

显然,对于第 n 层分形,有 $3^{n-1}$ 行

对于每一层分形,利用其左上角的坐标对其进行定位。

设在坐标为 (x,y)B(n) 层分形中,B(n-1) 层分形的各个坐标分别为

avatar

n=1 的时候特判一下即可。

AC代码:

#include<bits/stdc++.h>

using namespace std;

int n;
char a[1005][1005];
void solve(int x,int y,int n){
    if(n==2){
        a[x][y]='X';
        a[x+2][y]='X';
        a[x+1][y+1]='X';
        a[x][y+2]='X';
        a[x+2][y+2]='X';
    }else{
        solve(x,y,n-1);
        solve(x+2*pow(3,n-2),y,n-1);
        solve(x,y+2*pow(3,n-2),n-1);
        solve(x+pow(3,n-2),y+pow(3,n-2),n-1);
        solve(x+2*pow(3,n-2),y+2*pow(3,n-2),n-1);
    }
}
int main(){
    while(cin>>n){
        memset(a,' ',sizeof(a));
        if(n==1){
            cout<<"X";
        }else{
            solve(1,1,n);    
        }
        for(int i=1;i<=pow(3,n-1);i++){
            for(int j=1;j<=pow(3,n-1);j++){
                cout<<a[i][j];
            }
            cout<<endl;
        }
        cout<<"-"<<endl;
    }
    return 0;
}