算法
(递归)
递归+坐标变换
C++ 代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
int p[7]={1,3,9,27,81,243,729};
char get(int x,int y,int u)
{
if(u==1)return 'X';
int t=p[u-2];
if((x/t+y/t)%2==1)return ' '; //将x,y分成3段,观察得段号和为奇数则为空格
return get(x%t,y%t,u-1);
}
int main()
{
while(cin>>n,n!=-1)
{
int ed=p[n-1];
for(int i=0;i<ed;i++)
{
for(int j=0;j<ed;j++)
{
char c=get(i,j,n);
printf("%c",c);
}
printf("\n");
}
printf("-\n");
}
return 0;
}