2713: 优美三角剖分
时间限制: 1 Sec 内存限制: 64 MB提交: 20 解决: 5
[ 提交][ 状态][ 讨论版]
题目描述
小X同学为了搞好和小C同学的关系,特意寻找了一些优美的图像作为礼物。
这是一些由无穷无尽三角形组成的极为优美的图形,小X同学很想实现这些极富美感的图形,但是作为一名初赛都未过的伪退役选手,他水平有限,于是这个艰巨的任务就落在你们身上了。
由于好心的出题人,数据范围n<=10。
(具体图形详见样例,每一阶图形都是由3个上一阶图形拼成的)
这是一些由无穷无尽三角形组成的极为优美的图形,小X同学很想实现这些极富美感的图形,但是作为一名初赛都未过的伪退役选手,他水平有限,于是这个艰巨的任务就落在你们身上了。
由于好心的出题人,数据范围n<=10。
(具体图形详见样例,每一阶图形都是由3个上一阶图形拼成的)
输入
只有一行,输入一个整数为N,表示要求出N阶的图形。
输出
输出相应的图形。
样例输入
3
样例输出
/\
/__\
/\ /\
/__\/__\
/\ /\
/__\ /__\
/\ /\ /\ /\
/__\/__\/__\/__\
提示
来源
找规律,题目已经说了每一阶图形都是由3个上一阶图形拼成的,因此要递归的处理,或者一次将1~10的完整图形打出来存到数组里,最后根据n进行输出。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int n;
char a[2049][2049];
void fun(int b){
if(b==n){
int wid = pow(2,n);
for(int j=1;j<=pow(2,n);j++){
for(int i=1024-pow(2,n)+1;i<=1024+wid;i++){
printf("%c",a[j][i]);
}
puts("");
}
}else{
for(int j=1;j<=pow(2,b);j++){
for(int i=1024-pow(2,b)+1;i<=1024+pow(2,b);i++){
int p=pow(2,b);
a[j+p][i-p]=a[j][i];
a[j+p][i+p]=a[j][i];
}
}
fun(b+1);
}
}
int main()
{
while(~scanf("%d",&n)){
memset(a,' ',sizeof(a));
a[1][1024]='/';
a[1][1025]='\\';
a[2][1023]='/';
a[2][1024]='_';
a[2][1025]='_';
a[2][1026]='\\';
fun(1);
}
return 0;
}