先把N=7的最大矩阵数组画出来,然后根据输入取左上角块就行,注意去末尾空格
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char s[729][729];
memset(s, ' ', 729 * 729 * sizeof(char));
s[0][0] = 'X';
int i, j, k, prev = 1;
for (i = 2; i <= 7; i++)
{
for (j = 0; j < prev; j++)
for (k = 0; k < prev; k++)
if (s[j][k] == 'X')
{
s[j][k + 2 * prev] = s[j][k];
s[j + 2 * prev][k] = s[j][k];
s[j + prev][k + prev] = s[j][k];
s[j + 2 * prev][k + 2 * prev] = s[j][k];
}
prev *= 3;
}
int n;
while (scanf("%d", &n), n != -1)
{
int l = pow(3, n - 1);
for (i = 0; i < l; i++)
{
int begin = 0, index = -1;
for (j = 0; j < l; j++)
{
if (!begin && s[i][j] == 'X')
{
begin = 1;
index = j;
}
if (j == l - index)
{
putchar('\n');
break;
}
else
{
putchar(s[i][j]);
}
}
if (j == l)
putchar('\n');
}
putchar('-');
putchar('\n');
}
return 0;
}