/*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]);//输出答案
}