hdu 多校赛 Problem L. Visual Cube
先给一个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");
}
}
}