分形
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N = 800; 4 char g[N][N]; 5 int mul(int n) { 6 int res = 1; 7 for (int i = 1; i <= n; i++) { 8 res *= 3; 9 } 10 return res; 11 } 12 void dfs(int n) { 13 if (n == 1) { 14 g[0][0] = 'X'; 15 return; 16 } 17 dfs(n - 1); 18 int len = mul(n - 2); 19 //右上的起点编号(0, 2 * len) 20 //中间的起点编号(1 * len, 1 * len) 21 //左下的起点编号(2 * len, 0) 22 //右下的起点编号(2 * len, 2 * len) 23 int sx[4] = {0, 1, 2, 2}; 24 int sy[4] = {2, 1, 0, 2}; 25 for (int k = 0; k < 4; k++) { //4次 26 for (int i = 0; i < len; i++) { 27 for (int j = 0; j < len; j++) { 28 g[sx[k] * len + i][sy[k] * len + j] = g[i][j]; 29 } 30 } 31 } 32 } 33 int main() { 34 dfs(7); 35 int n; 36 while (cin >> n && n != -1) { 37 int len = mul(n - 1); 38 for (int i = 0; i < len; i++) { 39 for (int j = 0; j < len; j++) { 40 if (g[i][j]) { 41 cout << "X"; 42 } else { 43 cout << " "; 44 } 45 } 46 cout << endl; 47 } 48 cout << "-" << endl; 49 } 50 return 0; 51 }