原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6330
题目很简单就是数学问题了直接贴代码,花时间算算就出来了
#include <iostream>
#include <cstdio>
#include <set>
#include <cstring>
#define MAXN 100100
using namespace std;
int main()
{
int t;
char cod[400][400];
scanf("%d", &t);
while(t--)
{
memset(cod, ' ', sizeof(cod));
int l, w, h;
scanf("%d%d%d", &l, &w, &h);
for(int i = 2*w+2*h; i >= 2*w+2; i -= 2)
{
for(int j = 1; j <= 2*l+1; j += 2)
{
cod[i][j] = '|';
if(j != 2*l+1)
cod[i][j+1] = '.';
}
}
for(int i = 2*w+2*h+1; i >= 2*w+2-1; i -= 2)
{
for(int j = 1; j <= 2*l+1; j += 2)
{
cod[i][j] = '+';
if(j != 2*l+1)
cod[i][j+1] = '-';
}
}
for(int i = 2; i <= 2*w; i += 2)
{
for(int j = 2*w-i+2; j <= 2*w+2*l-i+2; j+= 2)
{
cod[i][j] = '/';
if(j != 2*w+2*l-i+2)
cod[i][j+1] = '.';
}
}
for(int i = 2-1; i <= 2*w-1; i += 2)
{
for(int j = 2*w-i+2; j <= 2*w+2*l-i+2; j+= 2)
{
cod[i][j] = '+';
if(j != 2*w+2*l-i+2)
cod[i][j+1] = '-';
}
}
int k = 0;
for(int j = 2*w+2*l+1; j >= 2*l+2; j-= 2)
{
for(int i = 2+k; i <= 2*h+k; i += 2)
{
cod[i][j] = '|';
cod[i+1][j] = '+';
}
k += 2;
}
k = 0;
for(int j = 2*w+2*l+1-1; j >= 2*l+2-1; j-= 2)
{
for(int i = 2+k+2; i <= 2*h+k+2; i += 2)
{
cod[i][j] = '/';
cod[i+1][j] = '.';
}
k += 2;
}
for(int i = 1; i <= 2*w+2*h+1; i++)
{
for(int j = 1; j <= 2*w+2*l+1; j++)
{
if(cod[i][j] == ' ')
cout << '.';
else
cout << cod[i][j];
}
cout << endl;
}
}
}