直接枚举每一位递归判断是X还是空格即可,数组都不用开。
#include <bits/stdc++.h>
using namespace std;
int cpow(int x, int k) {
if (k == 0) {
return 1;
}
int t = cpow(x, k / 2);
if (k % 2 == 0) {
return t * t;
} else {
return t * t * x;
}
}
char work(int n, int x, int y, int len) {
if (n == 1) {
return 'X';
}
int sub_len = len / 3;
if ((x / sub_len + y / sub_len) % 2 == 0) {
return work(n - 1, x % sub_len, y % sub_len, sub_len);
} else {
return ' ';
}
}
int main(void) {
int n;
while ((scanf("%d", &n), n) != -1) {
int len = cpow(3, n - 1);
for (int i = 0; i < len; ++i) {
for (int j = 0; j < len; ++j) {
putchar(work(n, i, j, len));
}
putchar('\n');
}
putchar('-');
putchar('\n');
}
return 0;
}