18931 分形
时间限制:1000MS 代码长度限制:10KB
提交次数:0 通过次数:0
题型: 编程题 语言: 不限定
Description
分形,具有以非整数维形式充填空间的形态特征。
通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
现在,定义“盒子分形”如下:
一级盒子分形:
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级的盒子分形。
输入格式
输入一个不大于6的正整数n,代表要输出的盒子分形的等级。
输出格式
使用“X”符号输出对应等级的盒子分形。
输入样例
4
输出样例
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<math.h>
using namespace std;
char map[100][100];
void digui(int n, char map[][100],int x,int y) {
//递归出口
//当n为1的时候 该位置为X
if (n == 1) {
map[x][y] = 'X';
return;
}
//d为n分形第二长边
int d = pow(3, n - 2);
//一个点向左上 右上 中间 左下 右下 每个位置再递归
//左上
//容易漏左上 左上也需要递归!
digui(n - 1, map, x, y);
//右上
digui(n - 1, map, x, y + 2 * d);
//中间
digui(n - 1, map, x + d, y + d);
//左下
digui(n - 1, map, x + 2 * d, y);
//右下
digui(n - 1, map, x + 2 * d, y + 2 * d);
}
int main(void){
int n;
cin >> n;
// n最长边D为3的n-1次方
int D = pow(3, n - 1);
//初始化地图为空格
for (int i = 1; i <= D; i++) {
for (int j = 1; j <= D; j++) {
map[i][j] = ' ';
}
}
digui(n, map, 1, 1);
//输出地图
for (int i = 1; i <= D; i++) {
for (int j = 1; j <= D; j++) {
cout << map[i][j];
}
cout << endl;
}
return 0;
}