Description
分形(fractal)是物体在数量上,内容上“自相似”的一种数学抽象。
一个盒分形(box fractal)定义如下:
? 1度的盒分形为
X
? 2度的盒分形为
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度的盒分形的图形。
Input
输入由若干测试用例组成,每行给出一个不大于7的正整数。输入的最后一行以一个负整数-1表示输入结束。
Output
对于每个测试用例,输出用'X'标记的盒分形。注意'X'是大写字母。在每个测试用例后输出包含一个单破折号的一行。
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
-
就是递归绘图的问题
上代码
#include <iostream>
#include <cmath>
#include <cstring>
#define SIZE 1500
using namespace std;
bool a[SIZE][SIZE];
void box(int k, int x, int y) // 递归绘图函数
{
int t;
if (k == 1) // 边界
{
a[x][y] = true;
return;
}
t = pow(3, k - 2);
box(k - 1, x, y);
box(k - 1, x + 2 * t, y);
box(k - 1, x + t, y + t);
box(k - 1, x, y + 2 * t);
box(k - 1, x + 2 * t, y + 2 * t);
return;
}
int main(int argc, char** argv)
{
int n, i, j;
for ( ; ; )
{
cin >> n;
if (n == -1)
{
return 0;
}
memset(a, 0, sizeof (a));
box(n, 1, 1);
for (i = 1; i <= pow(3, n - 1); i++) // 输出分形
{
for (j = 1; j <= pow(3, n - 1); j++)
{
if (a[i][j])
{
cout << "X";
}
else
{
cout << " ";
}
}
cout << endl;
}
cout << "-" << endl;
}
return 0;
}