HDU - 6330(模拟画图)

题目链接:一只可爱的血小板为你引路啦~~~

题目:

题目意思:

按照一定格式画出一个 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;
}

猜你喜欢

转载自blog.csdn.net/WQN20172674/article/details/81323470