题目链接:哆啦A梦传送门
题意:给你长宽高,输出三维立方体。
题解:直接看代码。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char op[400][400];
int main()
{
int ncase;
scanf("%d",&ncase);
while(ncase--)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
memset(op,'.',sizeof(op));
int item1=2*x+1+2*y; ///方块长
int item2=2*z+1+2*y; ///方块宽
///首先我们先按行开始枚举
///前2*y行
for(int i=1;i<=2*y;i++)
{
for(int j=1;j<=2*y-i+1;j++)
op[i][j]='.';
if(i%2==1){
bool flag=1;
int start=2*y-i+2,ends=start+2*x;
for(int j=start;j<=ends;j++){
if(flag){
op[i][j]='+';
flag=0;
}
else{
op[i][j]='-';
flag=1;
}
}
}
else{
bool flag=1;
int start=2*y-i+2,ends=start+2*x;
for(int j=start;j<=ends;j++){
if(flag){
op[i][j]='/';
flag=0;
}
else{
op[i][j]='.';
flag=1;
}
}
}
}
///剩余的行
bool flag=1;
for(int i=2*y+1;i<=item2;i++)
{
if(flag){
bool flag1=1;
for(int j=1;j<=2*x+1;j++){
if(flag1){
op[i][j]='+';
flag1=0;
}
else{
op[i][j]='-';
flag1=1;
}
}
flag=0;
}
else{
bool flag1=1;
for(int j=1;j<=2*x+1;j++){
if(flag1){
op[i][j]='|';
flag1=0;
}
else{
op[i][j]='.';
flag1=1;
}
}
flag=1;
}
}
///最后我们开始弄最右侧面,也是按行开始枚举
int tot=2;
flag=1;
for(int j=item1;j>=item1-2*y+1;j--)
{
if(flag){
bool flag1=1;
for(int i=tot;i<=tot+2*z-1;i++){
if(flag1){
op[i][j]='|';
flag1=0;
}
else{
op[i][j]='+';
flag1=1;
}
}
flag=0;
}
else{
bool flag1=1;
for(int i=tot;i<=tot+2*z-1;i++){
if(flag1){
op[i][j]='.';
flag1=0;
}
else{
op[i][j]='/';
flag1=1;
}
}
flag=1;
}
tot++;
}
for(int i=1;i<=item2;i++){
for(int j=1;j<=item1;j++)
printf("%c",op[i][j]);
puts("");
}
}
}