题目
给定一个正整数n,参考输出样例,输出图形。
输入输出格式
输入格式
每个数据输入一个正整数n,表示图腾的大小(此大小非彼大小)
输出格式
这个大小的图腾
输入输出样例
输入样例
2
输出样例
/\
/__\
/\ /\
/__\/__\
解析
这个题目同样采用分治算法的思想,当n=k时的图腾,就相当于是n=k-1时的图腾通过平移得到三个不同的图形形成图腾。针对这个题目,首先需要解决当n=1时图形的输出,接着分析三次平移相应的偏移量,最后根据数据的大小输出图形,即可解决。相应的规律如下:
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
char c[2050][2050];
void f(int x,int y,int n){
if(n==1){//当n=1时图形的输出
c[x][y+1]='/';
c[x+1][y]='/';
c[x][y+2]='\\';
c[x+1][y+3]='\\';
c[x+1][y+1]='_';
c[x+1][y+2]='_';
return ;
}
int distance = pow(2,n);
//根据偏移量,通过三次平移,将三个三角形得到组合
f(x,y+distance/2,n-1);
f(x+distance/2,y,n-1);
f(x+distance/2,y+distance,n-1);
}
int main(){
int n;
cin>>n;
memset(c,' ',sizeof(c));//初始化为空格
f(0,0,n);
int distance=pow(2,n);
for(int i=0;i<distance;i++){//输出
for(int j=0;j<distance*2;j++){
cout<<c[i][j];
}
cout<<endl;
}
return 0;
}