Untitled
unknown
c_cpp
4 years ago
1.2 kB
10
Indexable
#include<stdio.h>
int n, len[20], dx[] = {0, 0, 1, 1}, dy[] = {0, 1, 0, 1};
char res[6600][6600];
int qpow(int a, int b){
if(b == 0) return 1;
if(b == 1) return a;
if(b%2 == 0){
int tmp = qpow(a, b/2);
return tmp*tmp;
}
else return a*qpow(a, b-1);
}
void rec(int row, int col, int depth, int loss){
if(depth == 1){
res[row][col] = '*';
return;
}
int w = qpow(2, depth-1);
int gap = len[depth-1] + 2;
for(int i=0 ; i<4 ; i++){
if(depth < n && loss == i) continue;
rec(row + dx[i]*gap, col + dy[i]*gap, depth-1, 3-i);
}
gap = len[depth]/2 - w/2;
for(int i=0 ; i<w ; i++){
for(int j=0 ; j<w ; j++){
int nx = row + gap + i;
int ny = col + gap + j;
res[nx][ny] = '*';
}
}
}
int main(){
len[1] = 1, len[2] = 4;
for(int i=3 ; i<=12 ; i++){
len[i] = 2*len[i-1] + 2;
}
scanf("%d", &n);
rec(0, 0, n, 0);
for(int i=0 ; i<len[n] ; i++){
for(int j=0 ; j<len[n] ; j++){
if(res[i][j] == '*') printf("*");
else printf(" ");
}
printf("\n");
}
return 0;
}Editor is loading...