C++ 代码
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
const int N = 2200; // 3^7 = 2187
int n;
char g[N][N];
/*
X X
X
X X
*/
int dx[] = {-1, -1, 1, 1, 0}, dy[] = {-1, 1, 1, -1, 0};
void dfs(int x, int y, int n) {
if (n == 1) {
g[x][y] = 'X';
return;
}
for (int i = 0; i < 5; ++i)
dfs(x + dx[i] * pow(3, n - 2), y + dy[i] * pow(3, n - 2), n - 1);
/*
dfs(x, y, n - 1);
dfs(x - pow(3, n - 2), y - pow(3, n - 2), n - 1);
dfs(x - pow(3, n - 2), y + pow(3, n - 2), n - 1);
dfs(x + pow(3, n - 2), y - pow(3, n - 2), n - 1);
dfs(x + pow(3, n - 2), y + pow(3, n - 2), n - 1);
*/
}
int main() {
while (cin >> n && n != -1) {
memset(g, ' ', sizeof g);
dfs(int(pow(3, n - 1)) / 2 + 1, int(pow(3, n - 1)) / 2 + 1, n);
for (int i = 1; i <= pow(3, n - 1); ++i, cout << endl)
for (int j = 1; j <= pow(3, n - 1); ++j)
cout << g[i][j];
cout << '-' << endl;
}
return 0;
}