题目描述
自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果(看Hint),在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?
输入输出格式
输入格式:
每个数据一个数字,表示图腾的大小(此大小非彼大小) n<=10
输出格式:
这个大小的图腾
输入输出样例
输入样例#1:
2
输出样例#1:
/\ /__\ /\ /\ /__\/__\
输入样例#2:
3
输出样例#2:
/\ /__\ /\ /\ /__\/__\ /\ /\ /__\ /__\ /\ /\ /\ /\ /__\/__\/__\/__\
【代码】
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,n0;
char ch[2050][2050]; //最多2^(10+1)=2048
void dfs(int len,int x,int y) //通过定位中点来确定三角形,递归分而治之
{ //大小,中点行,列
if(len==1)
{
ch[x][y]=ch[x][y+1]='_';
ch[x][y-1]=ch[x-1][y]='/';
ch[x][y+2]=ch[x-1][y+1]='\\'; //注意这里单斜杠是‘\\’
return;
}
int temp=(1<<(len-1));
dfs(len-1,x,y-temp); //左下
dfs(len-1,x,y+temp); //右下
dfs(len-1,x-temp,y); //上
}
int main() //在纸上画一下图例
{
cin>>n;
memset(ch,' ',sizeof(ch)); //memset的标准用法
n0=(1<<n);
dfs(n,n0,n0);
for(int i=1;i<=n0;i++)
{
int n1=(n0<<1);
for(int j=1;j<=n1;j++)printf("%c",ch[i][j]); //printf是不用&的。。。
cout<<"\n";
}
return 0;
}