【tyvj1009】立体图

tyvj1009

代码能力题。

我是倒着存的,因为正着存不好确定坐标什么的……不过后来发现这都无所谓

此题最艰难的地方在于如何把给的坐标转换成输出的图的坐标,这个找规律还是蛮蛋疼的,我调这个题用了一个小时,其中大部分时间都在干这个……

顺便,打出来之后用来玩还是挺不错的233

#include<cstdio>
#include<iostream>
using namespace std;
int num[233][233];
char map[2333][2333];//行:2*n+3*m 
void tc(int x,int y)
{
      map[x][y]='+';  map[x][y+1]='-';  map[x][y+2]='-';  map[x][y+3]='-';  map[x][y+4]='+';
    map[x+1][y]='|';map[x+1][y+1]=' ';map[x+1][y+2]=' ';map[x+1][y+3]=' ';map[x+1][y+4]='|';map[x+1][y+5]='/';
    map[x+2][y]='|';map[x+2][y+1]=' ';map[x+2][y+2]=' ';map[x+2][y+3]=' ';map[x+2][y+4]='|';map[x+2][y+5]=' ';map[x+2][y+6]='+';
    map[x+3][y]='+';map[x+3][y+1]='-';map[x+3][y+2]='-';map[x+3][y+3]='-';map[x+3][y+4]='+';map[x+3][y+5]=' ';map[x+3][y+6]='|';
                    map[x+4][y+1]='/';map[x+4][y+2]=' ';map[x+4][y+3]=' ';map[x+4][y+4]=' ';map[x+4][y+5]='/';map[x+4][y+6]='|';
                    map[x+5][y+2]='+';map[x+5][y+3]='-';map[x+5][y+4]='-';map[x+5][y+5]='-';map[x+5][y+6]='+';
}   
/*
+---+.. 
|   |/. 
|   | + 
+---+ | 
./   /| 
..+---+ 
*/
int main()
{
    freopen("graph.in","r",stdin);
    freopen("graph.out","w",stdout);
    int n,m,maxn=0,maxm=0;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&num[i][j]);
            int ii=(n-i)*2+1,k=num[i][j];
            maxn=max(maxn,1+3*(k-1)+ii-1+5);
            maxm=max(maxm,1+(j-1)*4+ii-1+6);
        }
    }
    for(int i=maxn;i>=1;i--)
    for(int j=1;j<=maxm;j++)
    {
        map[i][j]='.';
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            for(int k=1;k<=num[i][j];k++)
            {
                int ii=(n-i)*2+1;
                tc(1+3*(k-1)+ii-1,1+(j-1)*4+ii-1);
            }
        }
    }
    int a=1,b=23333333,c=23333333,d=1;  

    for(int i=maxn;i>=1;i--)
    {
        for(int j=1;j<=maxm;j++)
        {
            if(map[i][j]!='.')
            {
                a=max(a,i);
                b=min(b,i);
                c=min(c,j);
                d=max(d,j);
            }
        }
    }   
    for(int i=a;i>=b;i--)
    {
        for(int j=c;j<=d;j++)
        {
            printf("%c",map[i][j]);
        }
        puts("");
    }
    puts("");   
    return 0;
}


/*
1 3
100 100 100
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值