p1066.dpr

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· DPR 代码 · 共 126 行

DPR
126
字号
program p1066;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
        map     : array[1..50 , 1..50] of Char;
        matrix  : array[1..11 , 1..11] of Longint;
        fill    : array[1..50 , 1..50] of Longint;
        n       : Longint;
        step    : Longint;

procedure init;
var     i , j   : Longint;
begin
        for i := 1 to n do
                begin
                for j := 1 to n do read ( matrix [i] [j] );
                readln;
                end;
end;

procedure Work;
var     i , j   : Longint;
begin
        fillchar ( fill , sizeof ( fill ) , 0 );
        fillchar ( map , sizeof ( map ) , ' ' );

        for i := 1 to 4 * n - 1 do
                begin
                map [i] [1] := '*';
                map [i] [4 * n + 3] := '*'
                end;
        for i := 1 to 4 * n + 3 do
                begin
                map [1] [i] := '*';
                map [4 * n - 1] [i] := '*';
                end;

        for i := 1 to n do
                for j := 1 to n do
                        map [4 * i - 2] [4 * j] := 'O';

        for i := 1 to n do
                for j := 1 to n + 1 do
                        map [4 * i - 2] [4 * j - 2] := 'H';
        for i := 1 to n - 1 do
                for j := 1 to n do
                        map [4 * i] [4 * j] := 'H';


        for i := 1 to n do
                for j := 1 to n do
                        begin
                        if matrix [i] [j] = 1 then
                                begin
                                map [4 * i - 2] [4 * j - 1] := '-';
                                map [4 * i - 2] [4 * j + 1] := '-';
                                inc ( fill [4 * i - 2] [4 * j] , 2 );
                                inc ( fill [4 * i - 2] [4 * j - 2] );
                                inc ( fill [4 * i - 2] [4 * j + 2] );
                                end;
                        if matrix [i] [j] = -1 then
                                begin
                                map [4 * i - 3] [4 * j] := '|';
                                map [4 * i - 1] [4 * j] := '|';
                                inc ( fill [4 * i - 2] [4 * j] , 2 );
                                inc ( fill [4 * i - 4] [4 * j] );
                                inc ( fill [4 * i] [4 * j] );
                                end;
                        end;

        for i := 1 to n do
                for j := 1 to n do
                        if matrix [i] [j] = 0 then
                                begin
                                if ( i > 1 ) and ( fill [4 * i - 4] [4 * j] = 0 )
                                        then begin
                                        map [4 * i - 3] [4 * j] := '|';
                                        inc ( fill [4 * i - 4] [4 * j] );
                                        end
                                        else begin
                                        map [4 * i - 1] [4 * j] := '|';
                                        inc ( fill [4 * i] [4 * j] );
                                        end;
                                if fill [4 * i - 2] [4 * j - 2] = 0
                                        then begin
                                        map [4 * i - 2] [4 * j - 1] := '-';
                                        inc ( fill [4 * i - 2] [4 * j - 2] );
                                        end
                                        else begin
                                        map [4 * i - 2] [4 * j + 1] := '-';
                                        inc ( fill [4 * i - 2] [4 * j + 2] );
                                        end;
                                end;
end;

procedure print;
var     i , j   : Longint;
begin
        writeln ( 'Case ' , Step , ':' );
        writeln;
        for i := 1 to 4 * n - 1 do
                begin
                for j := 1 to 4 * n + 3 do
                        write ( map [i] [j] );
                writeln;
                end;
end;

begin
  { TODO -oUser -cConsole Main : Insert code here }
        Step := 0;
        while true do
                begin
                readln ( n ); if n = 0 then break;
                inc ( Step );
                if Step > 1 then writeln;
                init;
                Work;
                print;
                end;
end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?