我一开始的想法是间断性的输出空格和solve(k-1)
但是发现问题很大。
雨菲:可以用一个数组保存啊
我:那不爆了?
雨菲:不会爆。
我一算:729 × 729,还真没爆。
然后就直接WA了......
仔细观察,发现要输出X,而我输出x
然后就A了。
大水题。
#include <cstdio>
/**
made with Unity
poj 2083
*/
using namespace std;
const int N = ;
char G[N][N];
inline int pow(int a, int b) {
int ans = ;
for(int i = ; i <= b; i++) {
ans *= a;
}
return ans;
} void solve(int k, int x, int y) {
if(k == ) {
G[x][y] = 'X';
return;
}
int len = pow(, k - );
solve(k - , x, y);
solve(k - , x + * len, y);
solve(k - , x + * len, y + * len);
solve(k - , x, y + * len);
solve(k - , x + len, y + len);
return;
} int main() {
int n;
while(scanf("%d", &n)) {
if(n == -) {
break;
}
for(int i = ; i < N; i++) {
for(int j = ; j < N; j++) {
G[i][j] = ' ';
}
}
solve(n, , );
int len = pow(, n - );
for(int i = ; i < len; i++) {
for(int j = ; j < len; j++) {
putchar(G[i][j]);
}
printf("\n");
}
printf("-\n");
} return ;
}
AC代码