【t006】三角形分形描绘问题
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;
}
【t006】三角形分形描绘问题的更多相关文章
- 混沌分形之谢尔宾斯基(Sierpinski)
本文以使用混沌方法生成若干种谢尔宾斯基相关的分形图形. (1)谢尔宾斯基三角形 给三角形的3个顶点,和一个当前点,然后以以下的方式进行迭代处理: a.随机选择三角形的某一个顶点,计算出它与当前点的中点 ...
- 分形之谢尔宾斯基(Sierpinski)三角形
谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集.也有的资料将其称之为谢尔宾斯基坟垛. 其生成过程为: 取一个 ...
- 分形之拆分三角形(Split Triangle)
前面讲了谢尔宾斯基三角形,它是不停地将一个三角形拆分三个与之相似的三角形.这一节给大家展示的图形是将一个等腰钝角三角形不停地拆分两个与之相似的三角形. 核心代码: static void SplitT ...
- 很有趣的Java分形绘制
部分与整体以某种形式相似的形,称为分形. 首先我们举个例子: 我们可以看到西兰花一小簇是整个花簇的一个分支,而在不同尺度下它们具有自相似的外形.换句话说,较小的分支通过放大适当的比例后可 ...
- python---使用递归实现谢尔宾斯基三角形及汉诺塔
渐入佳境. # coding: utf-8 import turtle ''' # =================turtle练手== def draw_spiral(my_turtle, lin ...
- 18个分形图形的GIF动画演示
这里提供18个几何线段分形的GIF动画图像.图形颜色是白色,背景色为黑色,使用最基本的黑与白以表现分形图形. (1)科赫(Koch)雪花 (2)列维(levy)曲线 (3)龙形曲线(Drago ...
- 分形之谢尔宾斯基(Sierpinski)地毯
前面讲了谢尔宾斯基三角形,和这一节的将把三角形变为正方形,即谢尔宾斯基地毯,它是由瓦茨瓦夫·谢尔宾斯基于1916年提出的一种分形,是自相似集的一种. 谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似,区别仅 ...
- 混沌分形之迭代函数系统(IFS)
IFS是分形的重要分支.它是分形图像处理中最富生命力而且最具有广阔应用前景的领域之一.这一工作最早可以追溯到Hutchinson于1981年对自相似集的研究.美国科学家M.F.Barnsley于198 ...
- BZOJ1258 [CQOI2007]三角形
Description 画一个等边三角形,把三边的中点连接起来,得到四个三角形,把它们称为T1,T2,T3,T4,如图1.把前三个三角形也这样划分,得到12个更小的三角形:T11,T12,T13,T1 ...
随机推荐
- jfreechart,pdf生成组件iText,jasper report报表组件及POI操作excel等在企业软件开发中常遇到的第三方应用
熟悉WEB Service ,Ajax,DWR,JQuery,iBatis等技术,熟练TOMCAT,IIS,JBoss,WebLogic等服务器 图表组件JFreeChart PDF组件-iText的 ...
- 原生js大总结五
041.在js中如何用方法将10进制的字符转换成16进制和8进制 数字.toString(16) 数字.toString(8) 042.如何创建时间对象 new Date() 04 ...
- 1.1 Python基础知识 - 变量
1.什么是变量? 变量是可以通过变量名访问的内存地址,变量通常是可变的. 2.怎样去定义? 变量格式: 变量名 = "变量值" 例如: name = "Zhanghk&q ...
- HDU 2063 过山车 第一道最大二分匹配
http://acm.hdu.edu.cn/showproblem.php?pid=2063 题目大意: m个女生和n个男生一起做过山车,每一排必须一男一女,而每个女孩愿意和一些男生坐一起,, 你要找 ...
- 判断Bigdecimal类型是否等于0的方法
1.我之前用来判断Bigdecimal类型是否等于0的方法 b.equals(BigDecimal.ZERO); 用equals方法和BigDecimal.ZERO进行比较. 2.上面方法存在的问题 ...
- 老李的菜园 mysql 自定义函数
新建: Create function function_name(参数列表)returns返回值类型 函数体 函数名,应该合法的标识符,并且不应该与已有的关键字冲突. 一个函数应该属于某个数据库,可 ...
- git各种命令 & git merge和git rebase的区别
git merge 和 rebase的区别: http://blog.csdn.net/jollyjumper/article/details/24743751 对于两个分支而言,rebase和mer ...
- Android中Activity切换时共享视图元素的切换动画(5.0以上)
同一时候公布在我的博客 点此进入 背景 说来这个的背景很easy,常常在使用图片列表的时候就会想,假设"列表中的图片放大到整个屏幕"作为 Activity 的补间动画.就很完美了. ...
- 辛星笔记之高质量JavaScript代码书写要点
首先本文章是http://www.zhangxinxu.com/wordpress/?p=1173 的读书笔记,读者能够自己到鑫旭的空间去阅读原文.这里我对其进行了简化. 可维护的代码的一些要求: ( ...
- 并查集(disjoint set)的实现及应用
这里有一篇十分精彩.生动的 并查集详解 (转): "朋友的朋友就是朋友"⇒ 传递性,建立连通关系 disjoint set,并查集(一种集合),也叫不相交集,同时也是一种树型的数据 ...