题目描述
​ 当 n 为 1 时,图形如下图:

X

当 n 为 2 时,图形如下图:

X X
X
X X

当 n≥2 时,图形规律如下:

图形n-1    图形n-1
图形n-1
图形n-1 图形n-1

给定 n 组数据,输出每组数据对应的图形。

输入
​ 输入共 n+1​ 行,前 n​ 行每行一个数,表示要输出的图形的大小,最后一行输入 −1​ 代表程序结束。(1≤n≤7)​
输出
​ 每输入一个数输出一组图形,并在图形后的下一行输出一个 −。

注意,图形后应补齐空格。

样例输入
1
2
3
4
-1
样例输出

X
-
X X
X
X X
-
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
-
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
-

数据规模与约定
​ 时间限制:1 s

内存限制:256 M

100% 的数据保证 1≤n≤7

#include <iostream>
using namespace std;

int num[10] = { 0,1,3,9,27,81,243,729,2187};
char ans[1000][1000] = { 0 };
void func(int x, int y, int n) {
if (n == 1) ans[x][y] = 'X';
else {
func(x, y, n - 1);
func(x, y + num[n] / 3 * 2, n - 1);
func(x + num[n] / 3, y + num[n] / 3, n - 1);
func(x + num[n] / 3 * 2, y, n - 1);
func(x + num[n] / 3 * 2, y + num[n] / 3 * 2, n - 1);
}
}

int main() {
int temp;
while (cin>>temp) {
if (temp == -1) break;
func(1, 1, temp);
for (int i = 1; i <= num[temp]; i++) {
for (int j = 1; j <= num[temp]; j++) {
if (ans[i][j]) {
cout << 'X';
}
else {
cout << ' ';
}
}
cout << endl;
}
cout << '-' << endl;
}
return 0;
}