题目描述
分形,具有以非整数维形式充填空间的形态特征。
通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
现在,定义“盒子分形”如下:
一级盒子分形:
X
二级盒子分形:
X X X X X
如果用 \red{B(n - 1)}B(n−1)代表第\red{n-1}n−1级盒子分形,那么第n级盒子分形即为:
B(n - 1) B(n - 1) B(n - 1) B(n - 1) B(n - 1)
你的任务是绘制一个\red{n}n级的盒子分形。
输入格式
输入包含几个测试用例。 输入的每一行包含一个不大于\red{7}7的正整数\red{n}n,代表要输出的盒子分形的等级。 输入的最后一行为\red{-1}−1,代表输入结束。
输出格式
对于每个测试用例,使用“\red{X}X”符号输出对应等级的盒子分形。 请注意’\red{X}X’是一个大写字母。 每个测试用例后输出一个独立一行的短划线。
样例
输入数据
1
2
3
4
-1
Copy
输出数据
X
-
X X
X
X X
-
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
-
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
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 <queue>
#include <math.h>
#include <stack>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <string.h>
#include <algorithm>
using namespace std;
#define LL long long
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
char a[1000][1000];
void f(int x , int y , int n)
{
if(n == 1)
{
a[x][y] = 'X';
return ;
}
f(x,y,n-1);
f(x,y+pow(3,n-2)*2,n-1);
f(x+pow(3,n-2),y+pow(3,n-2),n-1);
f(x+pow(3,n-2)*2,y,n-1);
f(x+pow(3,n-2)*2,y+pow(3,n-2)*2,n-1);
}
int main()
{
int n;
memset(a,' ',sizeof( a));
while(cin >> n && ~n)
{
f(0 , 0 , n);
for(int i = 0 ; i < pow(3,n-1) ; i++)
{
for(int j = 0 ; j < pow(3,n-1) ; j++)
printf("%c", a[i][j]);
puts("");
}
puts("-");
}
return 0;
}