叠筐问题

叠筐问题

题目如下:

我们需要使用筐的时候,就把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

输入描述:

输入是一个个的三元组,分别是,外筐尺寸n(n为满足1≤n≤79的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符,输入数据有多组。

输出描述:

输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。

 

我的思考:

这道题用二维数组处理图案,通过观察发现中间位置图案被周围的图案围住,然后交替用一种图案围住另一种图案,最外面的一圈要去掉四个角。代码中要注意第一个摞起来的筐和后面的筐要有一个换行符间隔。处理换行符的flag标记要定义在最外层循环的外面。

 

#include <iostream>


int main() {
    int n = 0;
    char B, A;
    bool flag = true;

    while (scanf("%d %c %c", &n, &B, &A) != EOF) {
        char arr[80][80] = {0};
        int x = n / 2, y = n / 2;
        char cur = B;
        if (flag == true) {
            flag = false;
        } else {
            printf("\n");
        }
        for (int length = 1; length <= n; length += 2, x--, y--) {
            for (int i = x, j = y; j < length + y; j++)
                arr[i][j] = cur;
            for (int i = x, j = y; i < length + x; i++)
                arr[i][j] = cur;
            for (int i = x + length - 1, j = y; j < length + y; j++)
                arr[i][j] = cur;
            for (int i = x, j = y + length - 1; i < length + x; i++)
                arr[i][j] = cur;
            if (cur == B)cur = A;
            else cur = B;
        }
        if (n != 1) {
            arr[0][0] = ' ';
            arr[0][n - 1] = ' ';
            arr[n - 1][0] = ' ';
            arr[n - 1][n - 1] = ' ';
        }

        for (int i = 0; i < n; i++) {
            printf("%s\n", arr[i]);
        }
    }
    return 0;
}

 

Comments are closed.