枚举每个位置判断一下是不是X就好了
1 /* *********************************************** 2 Author :BPM136 3 Created Time :2018/7/16 12:09:10 4 File Name :2083.cpp 5 ************************************************ */ 6 7 #include<iostream> 8 #include<cstdio> 9 #include<algorithm> 10 #include<cstdlib> 11 #include<cmath> 12 #include<cstring> 13 #include<vector> 14 using namespace std; 15 16 const int N = 105; 17 18 int bit3[N]; 19 20 int PIC_OUT(int n,int x,int y) { 21 if(n<=0) return 1; 22 for(int i=1;i<=3;i++) { 23 for(int j=1;j<=3;j++) { 24 if(bit3[n-1]*(i-1)<x && x<=bit3[n-1]*i) { 25 if(bit3[n-1]*(j-1)<y && y<=bit3[n-1]*j) { 26 if((i+j)%2) return 0; 27 return PIC_OUT(n-1,x-bit3[n-1]*(i-1),y-bit3[n-1]*(j-1)); 28 } 29 } 30 } 31 } 32 } 33 34 int main() { 35 int n; 36 bit3[0]=1; 37 for(int i=1;i<=8;i++) bit3[i]=bit3[i-1]*3; 38 while(scanf("%d",&n)!=EOF && n>=0) { 39 int m=bit3[n-1]; 40 for(int i=1;i<=m;i++) { 41 for(int j=1;j<=m;j++) { 42 putchar(PIC_OUT(n-1,i,j)==1?'X':' '); 43 } 44 putchar('\n'); 45 } 46 puts("-"); 47 } 48 return 0; 49 }