1593684826(1).jpg
观察可以发现,整个图的len长度是3^n-1,然后每相邻的n,n-1,他们之间的联系是前一项在后一项的左上角,那么我们就可以通过位移的偏量来算出中间右边左下角右下角四个部分的图形,一模一样的复制进去就行了。
#include<iostream>
#include<cstring>
using namespace std;
const int N=1010;
int g[N][N];
void dfs(int u)
{
if(u==1)
{
g[0][0]=1;
return ;
}
dfs(u-1);
int len=1;
for(int i=0;i<u-2;i++)
len*=3;
int dx[4]={0,1,2,2},dy[4]={2,1,0,2};
for(int i=0;i<4;i++)
for(int j=0;j<len;j++)
for(int k=0;k<len;k++)
{
g[dx[i]*len+j][dy[i]*len+k]=g[j][k];
}
}
int main()
{
int n;
while(cin>>n,n!=-1)
{
memset(g,0,sizeof g);
dfs(n);
int len=1;
for(int i=0;i<n-1;i++)
len*=3;
for(int i=0;i<len;i++)
{
for(int j=0;j<len;j++)
if(g[i][j]==1) cout<<"X";
else cout<<" ";
cout<<endl;
}
cout<<"-"<<endl;
}
return 0;
}