题解 P4327 【[COCI2006-2007#1] Okviri】

2018-08-03 09:15:47


用数组的都弱爆了。

第一行规律: ..#. 或者 ..*. 最后补一个 .

第二行规律: .#.# 或者 .*.* 最后补一个 .

第三行规律: 开始 #, 然后是 .X.# 或者 .X.*, 具体用哪个字符需要仔细观察一下。这里有点小坑。WA 了两次才发现有bug。

依次输出就行了。

void printLine1(int n)
{
    // n: num of characters
    for (int i = 1; i <= n; ++i)
        printf("..%c.", i % 3 == 0 ? '*': '#');
    printf(".\n");
}

void printLine2(int n)
{
    // n: num of characters
    char c;
    for (int i = 1; i <= n; ++i)
    {
        c = i % 3 == 0 ? '*' : '#';
        printf(".%c.%c", c, c);
    }
    printf(".\n");
}

void printMainLine(const char s[], int n)
{
    char c;
    putchar('#');
    for (int i = 0; i < n; ++i)
    {
        c = (i % 3 == 0 || (i % 3 == 1 && i == n - 1)) ? '#' : '*';
        printf(".%c.%c", s[i], c);
    }
    putchar('\n');
}

void printFrame(const char s[])
{
    int l = strlen(s);
    printLine1(l);
    printLine2(l);
    printMainLine(s, l);
    printLine2(l);
    printLine1(l);
    // printf("");
}

int main()
{
    char s[MAX_N];
    scanf("%s", s);
    printFrame(s);
}