Fractal自相似图形


Fractal
Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB
 
Problem description
A fractal is an object or quantity that displays self-similarity, in a somewhat technical sense, on all scales. The object need not exhibit exactly the same structure at all scales, but the same "type" of structures must appear on all scales. 
A box fractal is defined as below : 
 
  • A box fractal of degree 1 is simply 

     
  • A box fractal of degree 2 is 
    X  X 
      X 
    X  X 
     
  • If using B(n - 1) to represent the box fractal of degree n - 1, then a box fractal of degree n is defined recursively as following 
     
    B(n - 1)        B(n - 1)
    
            B(n - 1)
    
    B(n - 1)        B(n - 1)

Your task is to draw a box fractal of degree n.


Input
The input consists of several test cases. Each line of the input contains a positive integer n which is no greater than 7. The last line of input is a negative integer −1 indicating the end of input.
Output
For each test case, output the box fractal using the 'X' notation. Please notice that 'X' is an uppercase letter. Print a line with only a single dash after each test case. be careful, no extra blankspace allowed in the output.
Sample Input
1
2
3
4
-1
Sample Output
X
-
X X
 X
X X
-
X X   X X
 X     X
X X   X X
   X X
    X
   X X
X X   X X
 X     X
X X   X X
-
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
         X X   X X
          X     X
         X X   X X
            X X
             X
            X X
         X X   X X
          X     X
         X X   X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
-
Problem Source
Shanghai-P 2004

Submit   Discuss   Judge Status  Problems  Ranklist 

一、解题思路

读完题目先确定需要用到递归,然后我就想一边输一边画,每输入一个N,我就在屏幕上把这个图形画出来,但是经过实践,这个方法很慢,而且还有一个问题就是换号的问题很麻烦。观察到这个图形的长和宽其实是相等的,且都是3的(n-1)次方,那我们就可以用一个很大的二维数组来装这个图形(前提是题目给你的空间够大),也就是先把图形都画好,然后每次输入一个N,我们只需要输出数组中对应的已经画好的图形就好了。

这个图形其实可以分成9部分,每一个部分的规模temp=(3的(n-1)次方)/3,其中有5部分上面是次规模的图形,另外的4部分都是空格。那我们每次画之前就直接定位到这5各部分,设起始坐标为(x,y),那左上角的那一块的坐标为(x,y),右上角的坐标为(x+2*temp,y),左下角的那一块的坐标为(x,y+2*temp),右上角的坐标为(x+2*temp,y+2*temp),然后再分别对每个部分进行递归。画之前记得将数组的所有位置都初始化为空格哦,不然通不过。

现在图形可以画出来了,但是并不符合要求,因为按照题目要求,每一行的最后一个X后面是不能有空格的。那我们就可以在每次输出前,从后往前遍历每一行,确定每一行最后一个X的坐标k保存下来,然后输出的时候就只输出到k为止,然后换行输出下一行,这样每一行后面就不会有多余的空格。


二、注意细节

题目是有时间要求的,所以我们的代码里面不要有冗余的循环,或者是变量值计算,输出我采用的是c中的标准输入输出printf和scanf。


三、源代码

#include<iostream>
#include<math.h>

static char draw[1000][1000];
static int three[7];

void F(int n,int x,int y)
{
	int scale,temp,i,j;
	temp=three[n-1]/3;
	if(n>0)
	{
		if(n==1)
		{
			draw[x][y]='X';
		}
		else
		{
			//left_up
			F(n-1,x,y);
			//right_up
			F(n-1,x+2*temp,y);
			//left_down
			F(n-1,x,y+2*temp);
			//right_down
			F(n-1,x+2*temp,y+2*temp);
			//中间
			F(n-1,temp+x,temp+y);
		}
	}
}

int main()
{
	int size,scale,i,j,k;
	three[0]=1;
	for(k=1;k<7;k++)
	{
		three[k]=three[k-1]*3;
	}
	//将draw数组的所有位置都赋上初始值' '
	for(i=0;i<1000;i++)
		for(j=0;j<1000;j++)
			draw[i][j]=' ';
	//提前将图形都画好
	F(7,0,0);
	//进行输入,这里输入的0<size<=7,这个size的范围由你之前画好的图形确定
	while(scanf("%d",&size) && size != -1)
	{
		scale=pow(3,size-1);
		for(i=0;i<scale;i++)
		{
			//先用一个for循环找到每一行的最后一个位置k,然后用另一个for循环输出到k截止
			int k=0;
			for(k=scale-1;k>=0;k--)
			{
				if(draw[i][k]=='X')
				{
					break;
				}
			}
			for(j=0;j<=k;j++)
			{
				printf("%c",draw[i][j]);
			}
			printf("\n");
		}
		printf("%c\n",'-');
	}
		return 0;
}


算子迭代与自相似集 出版时间:2013年版 内容简介   《算子迭代与自相似集》主要涉及算子迭代与自相似集两个方面,系统介绍了若干压缩算子通过Picard迭代得到的不动点结果及其在迭代函数系统中的应用,进而介绍了若干新的分形吸引子的生成机制;并用较多的篇幅全面介绍了相似压缩生成的自相似集的Hausdorff测度和上凸密度的若干问题。全书共分七章和一个附录。第1章属预备章节,介绍与测度与维数相关的基本定义、术语、符号和有关的基本命题;第2章讨论各种压缩算子的迭代及其不动点结果;第3章介绍Hutchinson迭代函数系统与自相似集;第4章讨论(L,M,N)-迭代函数系统及其吸引子的存在性问题;第5章讨论n维欧氏空间中的自相似集的Hausdorff测度和有关问题;第6章讨论上凸密度与最好Hs-几乎处处覆盖;第7章介绍相似压缩不动点的若干结果。在附录A中简单介绍必需的集合论、度量空间的基础知识。《算子迭代与自相似集》内容丰富,论述严谨,条理清楚,图文并茂,并具有较好的自封性。《算子迭代与自相似集》不仅介绍算子迭代生成的迭代函数系统和自相似集的Hausdorff测度一般理论,而且还论述了近年来关于迭代函数系统和自相似集的Hausdorff测度的若干新理论与新方法,以及相关的公开问题。《算子迭代与自相似集》可供大学教师和科研工作者学习与研究使用,也可作为高年级本科生、研究生的教材和参考书。 目录 前言 符号表 第1章 测度与维数 1.1 测度论基础 1.2 Hausdorff测度与Hausdorff维数 1.3 Hausdorff容度与Hausdorff测度 1.4 覆盖定理 1.5 上(下)局部维数 1.6 分形的例子 第2章 算子迭代与不动点 2.1 压缩算子 2.1.1 压缩算子的定义 2.1.2 注记 2.2 压缩算子的不动点定理 2.2.1 几个经典的不动点定理 2.2.2 (a,b,c,e,f)一压缩算子的不动点结果 第3章 Hutchinson迭代函数系统与自相似集 3.1 分形空间 3.2 Hutchinson迭代函数系统 3.2.1 Hutchinson迭代函数系统与自相似集 3.2.2 相似压缩函数系统与Rn中的自相似集 第4章 (L,M,N)迭代函数系统与自相似集 4.1 迭代函数系统与一个公开问题 4.2 (L,M,N)-迭代函数系统与一个公开问题的回答 4.3 由(L,M,N)-迭代函数系统导出的新迭代函数系统 4.3.1 (L,O,L)迭代函数系统 4.3.2 (L,O,N)迭代函数系统 4.3.3 (O,O,N)迭代函数系统 第5章 自相似集的Hausdorff测度 5.1 自相似集的Hausdorff维数和Hausdorff测度 5.2 部分估计原理 5.3 自相似集的质量分布原理 5.3.1 几个引理 5.3.2 自相似集的质量分布原理 5.3.3 自相似集的Hausdorff测度的一个判据 5.4 满足强分离开集条件的自相似集的Hausdorff测度 5.4.1 几个引理 5.4.2 等式Hs(E∩U)=|U|s成立的充分条件 5.5 自相似集的Hausdoreff测度的计算 5.5.1 计算直线上的自相似集的Hausdorff测度的准确值例子 5.5.2 平面上的自相似集的Hausdorff测度的计算 5.6 关于Koch曲线的Hausdorff测度的近似值的计算 5.6.1 Koch曲线的Hausdorff测度 5.6.2 关于Hs(K)的近似值的算法及其计算机实现 5.7 关于自相似集的Hausdorff测度的公开问题及其研究 5.7.1 关于自相似集的Hausdorff测度的公开问题 5.7.2 最好覆盖的存在性不能蕴含自然覆盖是最好覆盖 5.7.3 强分离的自相似集在相似压缩不动点的最好形状的存在性 第6章 自相似集的上凸密度 6.1 s-集的一个覆盖性质 6.2 自相似集的最好几乎处处覆盖的存在性 6.3 自相似集的上凸密度与上球密度 6.3.1 s-集的上凸密度与上球密度 6.3.2 密度的基本性质 6.3.3 s-集的上凸密度的等价定义 6.3.4 自相似集的上凸密度 6.3.5 估计自相似集的上凸密度的下限的方法 6.3.6 自相似集的基本密度界 6.3.7 相似压缩不动点处的上凸密度 6.3.8 相似压缩不动点处的上凸密度的刻画 6.3.9 相似压缩不动点处的上凸密度小于1的充分必要条件 6.3.10 一些经典的自相似集的上凸密度的基本密度界 6.4 一类由自相似集的上凸密度的值所构成的集合的基数 6.5 估计自相似集的上凸密度的若干例子 6.6 关于Sierpmski垫片的上凸密度的最小值的存在性 第7章 自相似集的相似压缩不动点 7.1 相似压缩不动点的定义 7.2 一类线性Ca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值