问题 D: 优美三角剖分
时间限制: 1 Sec 内存限制: 64 MB提交: 13 解决: 4
[提交][状态][讨论版]
题目描述
小X同学为了搞好和小C同学的关系,特意寻找了一些优美的图像作为礼物。
这是一些由无穷无尽三角形组成的极为优美的图形,小X同学很想实现这些极富美感的图形,但是作为一名初赛都未过的伪退役选手,他水平有限,于是这个艰巨的任务就落在你们身上了。
由于好心的出题人,数据范围n<=10。
(具体图形详见样例,每一阶图形都是由3个上一阶图形拼成的)
这是一些由无穷无尽三角形组成的极为优美的图形,小X同学很想实现这些极富美感的图形,但是作为一名初赛都未过的伪退役选手,他水平有限,于是这个艰巨的任务就落在你们身上了。
由于好心的出题人,数据范围n<=10。
(具体图形详见样例,每一阶图形都是由3个上一阶图形拼成的)
输入
只有一行,输入一个整数为N,表示要求出N阶的图形。
输出
输出相应的图形。
样例输入
3
样例输出
/
/__
/ /
/__/__
/ /
/__ /__
/ / / /
/__/__/__/__
已更正,给数组a赋初值改成空了,不知道为什么改成空可以,赋别的值不行呢。
还有每一行后面的空格需要保留。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> using namespace std; int n; char a[1025][2049]; void fun(int b){ if(b==n){ for(int j=1;j<=pow(2,n);j++){ for(int i=1024-pow(2,n)+1;i<=1024+pow(2,n);i++){ printf("%c",a[j][i]); } printf(" "); } }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; }