題意
畫圖。
一級圖:
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);
}