原题
题目大意:就是输入某个数字,输出图形。
思路:递归无疑了,因为复杂的图形中都能够找到简单图形的影子,所以一定是递归,而且你看看题目说n不超过7,这说明了什么,因为复杂度太高了啊,这跟递归的定义不是又吻合了么,所以,递归写起来吧,但是,我们怎么递归呢,直接打印么???肯定是不行的,因为一旦换行了右边的图形就打不出来了,所以我们怎么解决呢?先存起来啊,最后再打印。
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
using ll=long long;
char res[1000][1000];//3^6=729
void dfs(int num,int x,int y)
{
if(num==1)
{
res[x][y]='X';
return ;
}
int mm=pow(3,num-2);
dfs(num-1,x,y);
dfs(num-1,x,y+2*mm);
dfs(num-1,x+mm,y+mm);
dfs(num-1,x+2*mm,y);
dfs(num-1,x+2*mm,y+2*mm);
}
int main()
{
int num;
while(cin>>num&&num!=-1)
{
for(int i=0;i!=1000;++i)
for(int j=0;j!=1000;++j)
res[i][j]=' ';
int number=pow(3,num-1);
dfs(num,0,0);
for(int i=0;i!=number;++i)
{
for(int j=0;j!=number;++j)
{
cout<<res[i][j];
}
cout<<endl;
}
}
}