题目链接:一只可爱的血小板为你引路啦~~~
题目:
题目意思:
按照一定格式画出一个 a × b × c 的长方体。 1 ≤ a,b,c ≤ 20
思路:
计算画布大小以及各个关键位置的坐标。
按照格式将画布填充正确。
代码:
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int t;
int c,k,g;
char pic[100][100];
scanf("%d",&t);
while(t--)
{
scanf("%d %d %d",&c,&k,&g);
int n,m;
m=(2*c)+1+(2*k);
n=(2*g)+1+(2*k);
memset(pic,'.',sizeof(pic));
// 第一部分
for(int i=(2*k),x=0; x<(2*g)+1; x++,i++)
{
if(i%2==0)
{
for(int j=0; j<(2*c)+1; j++)
if(j%2==0)pic[i][j]='+';
else pic[i][j]='-';
}
else if(i%2!=0)
{
for(int j=0; j<(2*c)+1; j++)
if(j%2==0)pic[i][j]='|';
else pic[i][j]='.';
}
}
//第二部分
for(int i=1; i<(2*k); i++)
{
if(i%2!=0)
{
for(int j=0; j<i; j++)
if(j%2==0)pic[i][m-1-j]='|';
else pic[i][m-1-j]='/';
}
else if(i%2==0)
{
for(int j=0; j<i; j++)
if(j%2==0)pic[i][m-1-j]='+';
else pic[i][m-1-j]='.';
}
}
for(int x=1; x<(2*k); x++)
{
int i=n-1-x;
if(x%2!=0)
{
for(int j=0; j<x; j++)
if(j%2==0)pic[i][(2*c)+1+j]='/';
else pic[i][(2*c)+1+j]='|';
}
else if(x%2==0)
{
for(int j=0; j<x; j++)
if(j%2==0)pic[i][(2*c)+1+j]='.';
else pic[i][(2*c)+1+j]='+';
}
}
//第三部分
for(int i=(2*k); i<(n-(2*k)); i++)
{
if(i%2==0)
{
for(int j=(2*c)+1; j<m; j++)
if(j%2!=0)pic[i][j]='.';
else pic[i][j]='+';
}
else if(i%2!=0)
{
for(int j=(2*c)+1; j<m; j++)
if(j%2!=0)pic[i][j]='/';
else pic[i][j]='|';
}
}
//第四部分
for(int i=0; i<(2*k); i++)
{
if(i%2==0)
{
int j=(2*k)-i;
for(int x=0; x<(2*c)+1; x++,j++)
if(x%2==0)pic[i][j]='+';
else pic[i][j]='-';
}
else if(i%2!=0)
{
int j=(2*k)-i;
for(int x=0; x<(2*c)+1; x++,j++)
if(x%2==0) pic[i][j]='/';
else pic[i][j]='.';
}
}
//第五部分
for(int i=0; i<(2*k); i++)
for(int j=0; j<(2*k)-i; j++)
{
pic[i][j]='.';
pic[n-1-i][m-1-j]='.';
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
printf("%c",pic[i][j]);
printf("\n");
}
}
return 0;
}