题目描述
无
样例
wu
算法1
(分形与递归)
对于等级为n发现每个图形的长和宽都是3^(n-1)
最中心的点的坐标就是(3^(n-1)/2+1,3^(n-1)/2+1),我们把这个坐标记为x,y。且这个大的图形由5个等级为n-1的图形组成,这几个图形的长和宽都是3^(n-2)记为l,且中心点分别位于(x±l,y±l)与(x,y)这四个点,然后就一直递归的解决就行了,递归的边界是n=1。
C++ 代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
bool ma[1000][1000];
int poww[20]={1,3,9,27,81,243,729,2187,6561,19683,59049};
void build(int n,int x,int y){
ma[x][y]=1;
if(n==1) return;
build(n-1,x+poww[n-2],y+poww[n-2]);
build(n-1,x+poww[n-2],y-poww[n-2]);
build(n-1,x-poww[n-2],y+poww[n-2]);
build(n-1,x-poww[n-2],y-poww[n-2]);
build(n-1,x,y);
}
int main(){
int n;
while(scanf("%d",&n)){
memset(ma,0,sizeof(ma));
if(n==-1) break;
build(n,poww[n-1]/2+1,poww[n-1]/2+1);
for(int i=1;i<=pow(3,n-1);++i){
for(int j=1;j<=pow(3,n-1);++j){
if(ma[i][j]) printf("X");
else printf(" ");
}
printf("\n");
}
printf("-\n");
}
}