问题描述
分形,具有以非整数维形式充填空间的形态特征。通常被定义为:
“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
现在,定义“盒子分形”如下:
一级盒子分形:
X
 
二级盒子分形:
X XX
X X
 
若用 B(n - 1) 表示第 n - 1 级盒子分形,那么第 n 级盒子分形的结构为:
B(n - 1)        B(n - 1)B(n - 1)B(n - 1)        B(n - 1)
 
即在一个大的框架中由 5 个 B(n - 1) 的图块构成——上下左右 4 个角以及中间部分。
输入格式
- 输入包含多个测试用例。
 - 每个测试用例为一行,包含一个不大于 7 的正整数 
n,表示输出第n级的盒子分形。 - 输入的最后一行为 
-1,表示输入结束。 
输出格式
- 对于每个测试用例,输出由字符 
X组成的对应等级的盒子分形图案。 - 每个测试用例输出完后单独输出一行,仅包含一个短横线 
-,作为分隔符。 
输入样例
1
2
3
4
-1
 
输出样例
X
-
X XX
X X
-
X X   X XX     X
X X   X XX XXX X
X X   X XX     X
X X   X X
-
X X   X X         X X   X XX     X           X     X
X X   X X         X X   X XX X               X XX                 XX X               X X
X X   X X         X X   X XX     X           X     X
X X   X X         X X   X XX X   X XX     XX X   X XX XXX XX X   X XX     XX X   X X
X X   X X         X X   X XX     X           X     X
X X   X X         X X   X XX X               X XX                 XX X               X X
X X   X X         X X   X XX     X           X     X
X X   X X         X X   X X
-
 
c++代码
#include<bits/stdc++.h>using namespace std;vector<vector<string>> result(8);vector<string> op(int x) {if (result[x].size() > 0) return result[x];vector<string> ans((int)(pow(3, x - 1)));if (x == 1) {ans[0] = "X";return ans;}vector<string> last = op(x - 1);int k = (int)pow(3, x - 2), w = 0;for (int i = 0; i < last.size(); i++, w++) {for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];for (int j = 0; j < k; j++) ans[w] += " ";for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];}for (int i = 0; i < last.size(); i++, w++) {for (int j = 0; j < k; j++) ans[w] += " ";for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];for (int j = 0; j < k; j++) ans[w] += " ";}for (int i = 0; i < last.size(); i++, w++) {for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];for (int j = 0; j < k; j++) ans[w] += " ";for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];}return ans;
}int main() {int n;for (int i = 1; i <= 7; i++) {result[i] = op(i);}while(cin >> n) {if (n == -1) break;vector<string> strs = result[n];for (string s : strs) {for (char a : s) {cout << a;}cout << endl;}cout << "-" << endl;}return 0;
}//by wqs
 
找规律的题目