백준/백준-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, 63);
    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 (--== 0)
        return;
    draw(cc, nn, n/2, c, cx, cy);
}
cs