【题目链接】

先给一个t表示案例个数,然后每一行给三个数字,表示立体的长宽高,输出立体。

比赛的时候没有想到开数组存然后遍历更新,接近两个小时的调试,修完所有bug,总算AC了。哇的一下就哭了。

一行一行纯暴力,一行一行直接输出,说多了都是泪啊。


下面是AC代码。

#include <iostream>
using namespace std;
int main()
{
    int t, a, b, c, q, w, e, flag = 1;
    scanf("%d", &t);
    while (t--)
    {
        flag = 1;
        scanf("%d%d%d", &a, &b, &c);
        q = a;
        w = b;
        e = c;
        for (int l = 0; l < 2 * b; l++)
        {
            for (int i = 0; i < 2 * b - l; i++)
                printf(".");
            if (l % 2 == 0)
            {
                for (int i = 0; i < q; i++)
                    printf("+-");
                printf("+");
            }
            else
            {
                for (int i = 0; i < q; i++)
                    printf("/.");
                printf("/");
            }
            for (int i = 0; i < l / 2; i++)
            {
                if (i < c)
                {
                    if (l % 2 == 0)
                        printf(".+");
                    else
                        printf("|/");
                }
            }
            if (l % 2 == 1 && l / 2 < c)
                printf("|");
            if (l >= 2 * c + 1)
            {
                for (int j = 0; j < flag; j++)
                    printf(".");
                flag++;
            }
            printf("\n");
        }
        for (int l = 2 * b; l < c * 2 + 2 * b + 1; l++)
        {
            if (l % 2 == 0)
            {
                for (int i = 0; i < q; i++)
                    printf("+-");
                printf("+");
                for (int i = 0; i < b; i++)
                {
                    if (l < 2 * c + 1 && 2 * a + 1 + (i - l) / 2 != 2 * a + 2 * b + 1)
                        printf(".+");
                }
                if (l >= 2 * c + 1)
                {
                    for (int i = l; i < 2 * c + 2 * b - 1; i += 2)
                        printf(".+");
                    w--;
                    for (int j = 0; j < flag; j++)
                        printf(".");
                    flag++;
                }
            }
            else
            {
                for (int i = 0; i < q; i++)
                    printf("|.");
                printf("|");
                for (int i = l; i < 2 * c + 2 * b - 1 && 2 * a + 1 + i - l != 2 * a + 2 * b + 1; i += 2)
                    printf("/|");
                if (l >= 2 * c + 1)
                {
                    printf("/");
                    for (int j = 0; j < flag; j++)
                        printf(".");
                    flag++;
                }
            }
            printf("\n");
        }
    }
}

赛后补题,开数组存,更新一下左上角和右下角,然后截取一段输出,只推了半个小时就推出来了,啊啊啊,我要上吊了。

#include <iostream>
#include <cstring>
using namespace std;
int map[100][100];
int main()
{
    //freopen("L.in", "r", stdin);
    //freopen("L.txt", "w", stdout);
    int t;
    scanf("%d", &t);
    while (t--)
    {
        int a, b, c, flag = 0;
        memset(map, 0, sizeof(map));
        scanf("%d %d %d", &a, &b, &c);
        for (int i = 0; i < 2 * b; i++)
        {
            if (i % 2 == 0)
            {
                for (int j = 0; j < 2 * b + 2 * a - i; j += 2)
                {
                    map[i][j] = '+';
                    map[i][j + 1] = '-';
                }
            }
            else
            {
                for (int j = 0; j < 2 * b + 2 * a - i; j += 2)
                {
                    map[i][j] = '.';
                    map[i][j + 1] = '/';
                }
            }
        }
        for (int i = 0; i < 2 * c + 2 * b + 1; i++)
        {
            for (int j = 0; j < 2 * a + 2 * b + 1; j++)
            {
                if (map[i][j] == 0)
                {
                    if (i % 2 == 0)
                    {
                        if (j % 2 == 0)
                            map[i][j] = '+';
                        else
                            map[i][j] = '.';
                    }
                    else
                    {
                        if (j % 2 == 0)
                            map[i][j] = '|';
                        else
                            map[i][j] = '/';
                    }
                }
            }
        }
        for (int i = 2 * b; i < 2 * b + 2 * c + 1; i++)
        {
            if (i % 2 == 0)
            {
                for (int j = 0; j < 2 * a; j += 2)
                {
                    map[i][j] = '+';
                    map[i][j + 1] = '-';
                }
            }
            else
            {
                for (int j = 0; j < 2 * a; j += 2)
                {
                    map[i][j] = '|';
                    map[i][j + 1] = '.';
                }
            }
        }

        for (int i = 0; i < 2 * b; i++)
        {
            for (int j = 0; j < 2 * b - i; j++)
                map[i][j] = '.';
        }
        for (int i = 2 * c + 2 * b + 1; i >= 2 * c + 1; i--)
        {
            for (int j = 2 * a + flag; j < 2 * a + 2 * b + 1; j++)
                map[i][j] = '.';
            flag++;
        }

        for (int i = 0; i < 2 * b + 2 * c + 1; i++)
        {
            for (int j = 0; j < 2 * a + 2 * b + 1; j++)
                printf("%c", map[i][j]);
            printf("\n");
        }
    }
}