杭电多校第三场L题
题目来源:http://www.sizaif.com:6680/upload/file/20180730/20180730154407_29748.pdf
题意:给定立体图形的长宽高,要求你输出图形。
分析:直接模拟(嗯……自己拆分了几次,能过样例但是没过),所以说一下拆分的方式
例如:
1
6 2 4
....+-+-+-+-+-+-+
.../././././././|
..+-+-+-+-+-+-+.+
./././././././|/|
+-+-+-+-+-+-+.+.+
|.|.|.|.|.|.|/|/|
+-+-+-+-+-+-+.+.+
|.|.|.|.|.|.|/|/|
+-+-+-+-+-+-+.+.+
|.|.|.|.|.|.|/|/.
+-+-+-+-+-+-+.+..
|.|.|.|.|.|.|/...
+-+-+-+-+-+-+....
可以拆分为三部分:一、正面,此例的4-12行,0-12列 二、上面0-3行,列数从第0行开始向下直到第3行每行减一列 三、侧面就是剩下的部分代码中会有注释。
代码如下:
#include <bits/stdc++.h>
using namespace std;
char a[100][100];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(a,'.',sizeof(a));
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
for(int i=0;i<2*y;i++)
{
for(int j=2*y-i;j<2*(x+y)+1-i;j++)//上面
{
if(i%2==0)
{
if(j%2==0)
a[i][j]='+';
else
a[i][j]='-';
}
else
{
if(j%2!=0)
a[i][j]='/';
}
}
}
for(int i=2*y;i<2*(y+z)+1;i++)//正面
{
for(int j=0;j<2*x+1;j++)
{
if(i%2==0)
{
if(j%2==0)
a[i][j]='+';
else
a[i][j]='-';
}
else
{
if(j%2==0)
a[i][j]='|';
}
}
}
for(int i=2*(x+y);i>=2*x+1;i--)//侧面
{
for(int j=2*(x+y)-i;j<2*(y+z)-2*y+(2*x+2*y-i)+1;j++)//行
{
if(i%2==0)
{
if(j%2==0)
a[j][i]='+';
else
a[j][i]='|';
}
else
{
if(j%2==1)
a[j][i]='/';
}
}
}
for(int i=0;i<2*(y+z)+1;i++)
{
for(int j=0;j<2*(x+y)+1;j++)
{
printf("%c",a[i][j]);
}
printf("\n");
}
}
return 0;
}