SCAU 数据结构 实验 18931 分形 笔记

/*18931 分形
时间限制:1000MS  代码长度限制:10KB
提交次数:0 通过次数:0
题型: 编程题   语言: 不限定
Description
分形,具有以非整数维形式充填空间的形态特征。
通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
现在,定义“盒子分形”如下:
一级盒子分形:

   X
二级盒子分形:

   X X
	X
   X X
如果用B(n - 1)代表第n-1级盒子分形,那么第n级盒子分形即为:

  B(n - 1)        B(n - 1)

		  B(n - 1)

  B(n - 1)        B(n - 1)
你的任务是绘制一个n级的盒子分形。

输入格式
输入一个不大于6的正整数n,代表要输出的盒子分形的等级。

输出格式
使用“X”符号输出对应等级的盒子分形。

输入样例
4

输出样例
		123456789                 27
1       X X   X X         X X   X X
2        X     X           X     X
3       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
9       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
27      X X   X X         X X   X X

https://blog.csdn.net/qq_21472271/article/details/111622638
*/

#include<stdio.h>
#include<math.h>
char w[30][30];
void dfs(int n, int x, int y)
{
	if (n == 1)
	{
		w[x][y] = 'X';
		return;
	}//递归终止条件 当图形规模小成一个X就可以输入了
	int m = pow(3, n - 2);//表示 3的n-2次方 算出的是一个图案的高或者宽(其实就是图案大小)
    //下面这些可以随意调换顺序
	dfs(n - 1, x, y);//查找左上
	dfs(n - 1, x + m, y + m);//查找中间 左上角到中间 行和列要加上图案的大小
	dfs(n - 1, x + 2 * m, y);//查找左下 左上角到左下 行要加上2倍图案的大小
	dfs(n - 1, x, y + 2 * m);//查找左上 左上角到左上 列要加上2倍图案的大小
	dfs(n - 1, x + 2 * m, y + 2 * m);//查找右下 左上角到右上 行和列要加上2倍图案的大小
}
int main()
{
	int n;
	scanf("%d", &n);
	int k = pow(3, n - 1);// 算行和列大小
	for (int i = 0; i < k; i++)
		for (int j = 0; j < k; j++)
			w[i][j] = ' ';  //表格初始化
	for (int i = 0; i < k; i++)
		w[i][k] = '\0';//加上换行符号
	dfs(n, 0, 0);//给表格填X 起点为0,0 以左上角为起点
	for (int i = 0; i < k; i++)
		puts(w[i]);//输出答案
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值