昨天碰到了个盒子分形问题,其实刚开始看上去没思路,后来看题可以把这个问题用递归解决,把问题分割解决。
**题目如下:**
(1)规模为1的盒子分形为
X
(2)规模为2的盒子分形为
X X
X
X X
(3)若用B(n - 1)表示规模为n-1的盒子分形,则规模为n的盒子分形为
B(n - 1) B(n - 1)
B(n - 1)
B(n - 1) B(n - 1)
你的任务是,输出规模为n的盒子分形。
例如,规模为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
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 730;
char maps[MAX][MAX];
//x, y 为当前盒子中心点,n为当前盒子的边长
void Box(int n, int x, int y)
{
//递归边界
if (n == 1){
maps[x][y] = 'X';
}
else{
//n-1度盒分形的规模m
int m = pow(3, n - 2);
//左上方的n-1度盒分形
Box(n - 1, x - m, y - m);
//右上方的n-1度盒分形
Box(n - 1, x - m, y + m);
//中间的n-1度盒分形
Box(n - 1, x , y);
//左下方的n-1度盒分形
Box(n - 1, m + x, y - m);
//右下方的n-1度盒分形
Box(n-1, m + x , y + m);
}
}
int main()
{
int n;
while (cin >> n && n > 0){
int size = pow(3, n - 1);
//初始化
for (int i = 0; i < size; i++){
for (int j = 0; j < size; j++){
maps[i][j] = ' ';
}
}
Box(n, size/2, size/2);
for (int i = 0; i < size; i++){
for (int j = 0; j < size; j ++)
{
if(maps[i][j]=='X')
{
cout <<maps[i][j] << " ";
}
else
{
cout << " ";
}
}
cout <<endl;
}
}
return 0;
}