题目地址:http://poj.org/problem?id=2083
思路:由图形可以得到规律
n=1时 图形大小为1*1 = 3^0 * 3^0
n=2时 图形大小为3*3 = 3^1 * 3^1
所以图形大小为3^(n-1)*3^(n-1)
由于题目最大n=7 所以用730*730的字符数组存放
n==1 X
n==2 X X
X
X X
代码思路的话,就是用一个起点向5个方向递归,知道n==1时
例如n==2时 以1,1位置当左上角 对1,1 1,3 2,2 3,1 3,3 五个方向进行递归
即左上 右上 中间 左下 右下五个方向
代码如下:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
using namespace std;
int n;
char map[730][730];
void f(int n,int x,int y){
if(n==1){
map[x][y] = 'X' ;
return;
}
int size = pow(3*1.0, n-2);
f(n-1,x,y); //左上角
f(n-1,x,y+2*size); //右上角
f(n-1,x+size,y+size); //中间
f(n-1,x+2*size,y); //左下角
f(n-1,x+2*size,y+2*size); //右下角
}
int main()
{
while(cin>>n){
if(n==-1)
break;
memset(map,' ',sizeof(map));
int size = pow(3*1.0,n-1);
f(n,1,1);
for(int i=1;i<=size;i++){
for(int j=1;j<=size;j++){
cout<<map[i][j];
}
cout<<endl;
}
cout<<"-"<<endl;
}
return 0;
}