优美三角剖分
题目
小X同学为了搞好和小C同学的关系,特意寻找了一些优美的图像作为礼物。
这是一些由无穷无尽三角形组成的极为优美的图形,小X同学很想实现这些极富美感的图形,但是作为一名初赛都未过的伪退役选手,他水平有限,于是这个艰巨的任务就落在你们身上了。
由于好心的出题人,数据范围n<=10。
(具体图形详见样例,每一阶图形都是由3个上一阶图形拼成的)
[外链图片转存失败(img-lTHiecvU-1562482901043)(http://10.156.31.134/admin/upload/images/未标题-1 拷贝(1).jpg)]
输入
只有一行,输入一个整数为N,表示要求出N阶的图形。
输出
输出相应的图形。
输入样例:T1
1
输入样例:T2
2
输入样例:T3
3
输出样例:T1
/\
/__\
输出样例:T2
/\
/__\
/\ /\
/__\/__\
输出样例:T3
/\
/__\
/\ /\
/__\/__\
/\ /\
/__\ /__\
/\ /\ /\ /\
/__\/__\/__\/__\
解题思路
把初始的值为一个最小的三角形,分成上下两层,不断的枚举来合成下一个即可.
注意
空格也要加上去.
程序如下
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int k,n;
string a[10001];
int main()
{
k=2;
a[1]=" /\\ ";//初始值
a[2]="/__\\";
scanf("%d",&n);
for(int i=2;i<=n;++i)
{
for(int j=1;j<=k;++j)
{
a[k+j]=a[j]+a[j];//合成下一个三角形
for(int q=1;q<=k;++q)
{
a[j]=" "+a[j]+" ";//空格
}
}
k*=2;
}
for(int i=1;i<=k;++i)
{
cout<<a[i]<<endl;
}
return 0;
}