Time Limit: 1 second

Memory Limit: 50 MB

【问题描述】

分形是以多种概念和方法相互冲击融合为特征的图形。分形所呈现的无穷玄机和美感引发人们去探索。分形使人们觉悟到科学与艺术的融合,数学与艺术审美上的统一,使昨日枯燥的数学不再仅仅是抽象的哲理,而是具体的感受;不再仅仅是揭示一类存在,而是一种艺术创作,分形搭起了科学与艺术的桥梁。 在分形艺术中,蕴含着浓厚的递归思想。下图是著名的Sierpinski Triangle。

编程任务:

我们使用ASCII码字符斜杠‘/’,反斜杠‘\’,下划线‘_’,空格‘ ’进行Sierpinski Triangle的描绘,例如,当n=1时,我们画出最小的三角形。

/\

/__\

【输入】

 第一行包括一个正整数n(1 ≤ n ≤ 10),表示要描绘的Sierpinski Triangle的递归程度。

【输出】

输出递归程度为n的Sierpinski Triangle。

注意:每行的末尾以反斜杠‘\’结束,行末不要包括多余的空格,每行开始与三角形的中心空白处,以ASCII空格填充。

【输入样例】

2

【输出样例1】

   /\
/__\
/\ /\
/__\/__\

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t006

【题意】

【题解】



先搞出n=1的情况;

然后每次把n-1的情况复制3个就好.

写个递推.

注意每个新的三角的位置坐标就好.



【完整代码】

#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x) typedef pair<int, int> pii;
typedef pair<LL, LL> pll; const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
const double pi = acos(-1.0);
const int N = 3000; struct abc
{
char s[1030][2050];
int kuan, gao;
}; abc ans[11]; void o(int x,int gao,int kuan)
{
rep2(i, gao, 1)
{
int up = kuan;
while (ans[x].s[i][up]==' ') up--;
rep1(j, 1, up)
putchar(ans[x].s[i][j]);
puts("");
}
} void get_one()
{
ans[1].s[1][1] = '/';
ans[1].s[1][2] = '_';
ans[1].s[1][3] = '_';
ans[1].s[1][4] = '\\';
ans[1].s[2][2] = '/';
ans[1].s[2][3] = '\\';
ans[1].kuan = 4;
ans[1].gao = 2;
} void fuzhi(int pos, int x, int y)
{
rep1(i,1,ans[pos-1].gao)
rep1(j, 1, ans[pos-1].kuan)
ans[pos].s[x + i - 1][y + j - 1] = ans[pos-1].s[i][j];
} void get_ans()
{
int now = 2;
rep1(i, 2, 10)
{
fuzhi(i,now + 1, now + 1);
fuzhi(i, 1, 1);
fuzhi(i, 1, ans[i - 1].kuan + 1);
ans[i].kuan = 2 * ans[i - 1].kuan;
ans[i].gao = 2 * ans[i - 1].gao;
now <<= 1;
}
} void input_data()
{
int n;
rei(n);
o(n,ans[n].gao,ans[n].kuan);
} int main()
{
//freopen("D:\\rush.txt", "r", stdin);
//freopen("D:\\rush_out.txt","w",stdout);
rep1(i,1,10)
rep1(j,1,1029)
rep1(k,1,2049)
ans[i].s[j][k] = ' ';
get_one();
get_ans();
input_data();
//printf("\n%.2f sec \n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}

最新文章

  1. JQuery文件上传插件ajaxFileUpload在Asp.net MVC中的使用
  2. Mvc 模块化开发
  3. VS工具--GhostDoc
  4. Ninject之旅之七:Ninject依赖注入
  5. mysq安装以及修改密码
  6. C#入门基础二
  7. 输入三个数a,b,c,要示按由小到大的顺序输出
  8. ios NSString 转 float的注意
  9. AJAX保留浏览历史的解决方案——hashchange()
  10. 基于jquery的页面代码的优化
  11. 自定义tab bar控件 学习资料
  12. gcc向待编译源文件传入参数的方法
  13. property()函数
  14. SQL server 使用 内联结(INNER JOIN) 联结多个表 (以及过滤条件 WHERE, AND使用区别)
  15. Java_myBatis_逆向工程
  16. 自动化测试使用cookie跳过验证码
  17. 20165305 苏振龙《Java程序设计》第七周学习总结
  18. [label][WorldPress] 一个很方便查找定位WorldPress源代码位置的网址
  19. HTML5离线存储之webstorage
  20. ServletContextListener知识点

热门文章

  1. AbstractQueuedSynchronizer的介绍和原理分析
  2. 百度ueditor vue项目应用 -- 图片上传源码修改
  3. MySQL的安装及使用教程
  4. [Nuxt] Update State with Vuex Actions in Nuxt.js
  5. [RxJS] Connection operator: multicast and connect
  6. ZYNQ7000 LVDS接口输出配置
  7. ArcGIS Spatial Query
  8. swift学习第九天:可选类型以及应用场景
  9. HTTP协议和HTTPS协议初探
  10. 嵌入式平台下的ldd