問題描述
分形,具有以非整數維形式充填空間的形態特征。通常被定義為:
“一個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都(至少近似地)是整體縮小后的形狀”,即具有自相似的性質。
現在,定義“盒子分形”如下:
一級盒子分形:
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
找規律的題目