思路:
显然,对于第 n 层分形,有 $3^{n-1}$ 行
对于每一层分形,利用其左上角的坐标对其进行定位。
设在坐标为 (x,y) 的 B(n) 层分形中,B(n-1) 层分形的各个坐标分别为
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;
}