题解:就是根据输入的n值来递归输出图形,我们不难发现在n的情况下,图形的宽度为3^(n-1),假设起始坐标为x,y,我们可以发现当k为上一级图形的宽度时,我们递归该图形的五个部分,则分别为(n-1,x,y+2k),(n-1,x+k,y+k),(n-1,x+2k,y),(n-1,x+2k,y+2k)。
由于n的范围很小,所以我们可以预处理出图案。
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
int num[7]={1,3,9,27,81,243,729};
char ch[800][800];
void print(int n);
void init(int n,int x,int y);
int main( )
{
int n;
memset(ch,' ',sizeof(ch));
init(7,0,0);
while(cin>>n&&n!=-1)
{
print(n-1);
}
return 0;
}
void print(int n)
{
for(int i=0;i<num[n];i++)
{
for(int j=0;j<num[n];j++)
{
cout<<ch[i][j];
}
cout<<endl;
}
cout<<"-"<<endl;
}
void init(int n,int x,int y)
{
if(n==1)
ch[x][y]='X';
else
{
int k=num[n-2];
init(n-1,x,y);
init(n-1,x,y+2*k);
init(n-1,x+k,y+k);
init(n-1,x+2*k,y);
init(n-1,x+2*k,y+2*k);
}
}