백준/백준-C++
2448번: 별찍기 - 11
Beabletoet
2018. 2. 14. 16:26
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include<cstdio> void init(int n); void print(int n); void draw(const int cc, const int nn, int n, int c, int cx, int cy); char star[3][7] = { { ' ',' ','*',' ',' ',' ' },{ ' ','*',' ','*',' ',' ' },{ '*','*','*','*','*',' ' } }; char paper[3072][6145]; int main() { int n, c = 0; scanf("%d", &n); init(n); for (int k = n; k != 1; ++c, k /= 2); draw(c, n, n, c, 6, 3); print(n); } void print(int n) { for (int i = 0; i < n; ++i) { for (int j = 0; j < n * 2; ++j) printf("%c", paper[i][j]); printf("\n"); } } void init(int n) { for (int i = 0; i < n; ++i) for (int j = 0; j < n * 2; ++j) paper[i][j] = ' '; } void draw(const int cc, const int nn, int n, int c, int cx, int cy) { if (cc == c) { for (int ky = 0; ky < 3; ++ky) for (int kx = 0; kx < 6; ++kx) paper[ky][kx + nn - 3] = star[ky][kx]; } else if (c > 0) { int xp = 3; for (int kc = cc - c - 1; kc--; xp *= 2); for (int ky = 0; ky < cy; ++ky) // cy=3 for (int kx = 0; kx < cx; ++kx) // cx=6 { paper[ky+cy][kx+nn-xp*2] = paper[ky][kx+nn-xp]; paper[ky+cy][kx+cx+nn-xp*2] = paper[ky][kx+nn-xp]; } cx *= 2; cy *= 2; } if (--c == 0) return; draw(cc, nn, n/2, c, cx, cy); } | cs |