NOIP2008T4 立体图

 

 

var m,n,i,j,p_i,p_j,hight:integer;
    canvas:array[0..800,0..360]of char;
    i_c,j_c:array[0..800] of boolean;
procedure drawVertex(x,y:integer);
begin
    canvas[x,y]:='+';
    canvas[x+4,y]:='+';
    canvas[x,y+3]:='+';
    canvas[x+4,y+3]:='+';
    canvas[x+2,y+5]:='+';
    canvas[x+6,y+5]:='+';
    canvas[x+6,y+2]:='+';
end;

procedure drawEdge(x,y:integer);
var i:integer;
begin
    for i:=y+1 to y+2 do
    begin
        canvas[x,i]:=chr(124);
        canvas[x+4,i]:=chr(124);
    end;
    for i:=y+3 to y+4 do canvas[x+6,i]:=chr(124);
    for i:=x+1 to x+3 do
    begin
        canvas[i,y]:='-';
        canvas[i,y+3]:='-';
    end;
    for i:=x+3 to x+5 do canvas[i,y+5]:='-';
    canvas[x+1,y+4]:='/';
    canvas[x+5,y+4]:='/';
    canvas[x+5,y+1]:='/';
end;

procedure drawFace(x,y:integer);
var i,j:integer;
begin
    for i:=y+1 to y+2 do
        for j:=x+1 to x+3 do canvas[j,i]:=' ';
    for j:=x+2 to x+4 do canvas[j,y+4]:=' ';
    for i:=y+2 to y+3 do canvas[x+5,i]:=' ';
end;

procedure draw(x,y,h:integer);
var o,p,q:integer;
begin
    for p:=x to x+6 do j_c[p]:=true;
    for o:=1 to h do
    begin
        for q:=3*o-3+y to 3*o+2+y do i_c[q]:=true;
        drawVertex(x,3*o-3+y);
        drawEdge(x,3*o-3+y);
        drawFace(x,3*o-3+y);
    end;
end;

begin
//    assign(input,'drawingu.in'); reset(input);
//    assign(output,'drawingu.out'); rewrite(output);
    readln(m,n);
    fillchar(canvas,sizeof(canvas),'.');
    fillchar(i_c,sizeof(i_c),false);
    fillchar(j_c,sizeof(j_c),false);
    for i:=m downto 1 do
        for j:=1 to n do
        begin
            read(hight);
            draw(2*i-1+4*j-4,2*i-1,hight);
        end;

    p_i:=3*m+3; p_j:=4*n+3;
    while i_c[p_i+1] do inc(p_i);
    while j_c[p_j+1] do inc(p_j);

    for i:=p_i downto 1 do
    begin
        for j:=1 to p_j do write(canvas[j,i]);
        writeln;
    end;

//    close(input); close(output);
end.

 

转载于:https://www.cnblogs.com/qilinart/articles/3388911.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值