题目描述
分形,具有以非整数维形式充填空间的形态特征。
通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
现在,定义“盒子分形”如下:
一级盒子分形:
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级的盒子分形。
输入格式
输入包含几个测试用例。
输入的每一行包含一个不大于7的正整数n,代表要输出的盒子分形的等级。
输入的最后一行为-1,代表输入结束。
输出格式
对于每个测试用例,使用“X”符号输出对应等级的盒子分形。
请注意’X’是一个大写字母。
每个测试用例后输出一个独立一行的短划线。
输入样例:
1
2
3
4
-1
输出样例
X
-
X X
X
X X
-
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
-
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
-
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N=750;
bool a[N][N];
void copy(int x1, int y1, int x2, int y2, int dim) {
for (int i1=x1, i2=x2; i1<x1+dim; i1++, i2++)
for (int j1=y1, j2=y2; j1<y1+dim; j1++, j2++)
a[i2][j2]=a[i1][j1];
}
void construct(int x) {
int i=2*x+1, dim=x;
copy(1,1,i,1,dim), copy(1,1,1,i,dim), copy(1,1,i,i,dim), copy(1,1,x+1,x+1,dim);
}
int main() {
int n;
a[1][1]=true;
for (int i=1; i<7; i++) construct(pow(3, i-1));
while (cin>>n, n!=-1) {
for (int i=1; i<=pow(3, n-1); i++, cout<<'\n')
for (int j=1; j<=pow(3, n-1); j++)
cout<<(a[i][j]?'X':' ');
cout<<"-\n";
}
return 0;
}