题意
画图。
一级图:
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
以此类推,给出一个n,画出n级图。
思路
我们可以发现这些图都是正方形,所以我们可以打出最大的图,然后按边长输出就好了。
代码
#include<cstdio>
int n,f[8]={0,1};
bool a[8][788][788];
inline void init() {
a[1][1][1]='X';
for (int i=2;i<=7;i++) f[i]=f[i-1]*3;//预处理每级图的边长
for (int t=1;t<=7;t++) {//打出最大的图
for (int i=1;i<=f[t-1];i++)
for (int j=1;j<=f[t-1];j++) {
a[t][i][j]=a[t-1][i][j];
a[t][i][j+f[t-1]*2]=a[t-1][i][j];
a[t][i+f[t-1]][j+f[t-1]]=a[t-1][i][j];
a[t][i+f[t-1]*2][j]=a[t-1][i][j];
a[t][i+f[t-1]*2][j+f[t-1]*2]=a[t-1][i][j];
}
}
}
inline void print(int x) {
for (int i=1;i<=f[x];i++) {//按边长输出
for (int j=1;j<=f[x];j++)
putchar(32+56*a[x][i][j]);
printf("\n");
}
printf("-\n");
}
int main() {
init();
while (scanf("%d",&n),n!=-1) print(n);
}