题目描述
魔法世界的科学家分形宇宙论,即宇宙是一个基本微粒,构成宇宙的无数个微粒又会有其他的小宇宙。分形定义如下:
1 度的分形为:
Copy to Clipboard
X
2 度的分形为:
Copy to Clipboard
X X
X
X X
如果 B (n-1) 表示 n-1 度的分形,则 n 度的分形递归定义如下:
Copy to Clipboard
B(n-1) B(n-1) B(n-1) B(n-1) B(n-1)
要求给定分形的度,输出相应的分形图。
输入描述
多组输入,每组输入一个正整数 n
输出描述
对应于每组数,输出相应的分形图,并用一个 “-” 分隔
样例输入
Copy to Clipboard
1 2
样例输出
Copy to Clipboard
X
-
X X
X
X X
-
代码如下
#include<bits/stdc++.h>
using namespace std;
#define MAX 100
char Matrix[MAX][MAX];
void DFS(int r, int c, int n, int MatrixLen) {
if (n == 1)
{
Matrix[r][c] = 'X';
}
else
{
int size = MatrixLen / 3;
DFS(r + size, c + size, n - 1, size);
DFS(r + 2 * size, c, n - 1, size);
DFS(r + 2 * size, c + 2 * size, n - 1, size);
DFS(r, c + 2 * size, n - 1, size);
DFS(r, c, n - 1, size);
}
}
int main() {
int n;
while (cin >> n)
{
int MatrixLen = 1; // 矩阵大小
for (int i = 0; i < n - 1; i++)
{
MatrixLen *= 3;
}
for (int i = 0; i < MatrixLen; i++)
{
memset(Matrix[i], 'a', MatrixLen * sizeof(char));
}
DFS(0, 0, n, MatrixLen);
for (size_t i = 0; i < MatrixLen; i++)
{
for (int j = 0; j < MatrixLen; j++)
{
if (Matrix[i][j] == 'a')
{
cout << " ";
}
else {
cout << Matrix[i][j];
}
}
cout << endl;
}
cout << "-" << endl;
}
return 0;
}