p2409.pas

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

PAS
150 行
字号
PROGRAM p2409;

VAR
        part,p          :Integer;
        card            :array[1..5,1..2] of Integer;
        name            :array[1..5]of String;
        ordering        :array[1..5] of Integer;
        chose           :array[1..5] of Integer;

PROCEDURE Readin;
var
        i               :Integer;
        s               :String;
begin

readln(s);
for i:=1 to 5 do
        begin
        ordering[i]:=i;
        if pos(' ',s)=0 then name[i]:=s
                else
                begin
                name[i]:=copy(s,1,pos(' ',s)-1);
                delete(s,1,pos(' ',s));
                end;

        case name[i][length(name[i])] of
                'C'             :card[i][2]:=1;
                'D'             :card[i][2]:=2;
                'H'             :card[i][2]:=3;
                'S'             :card[i][2]:=4;
        end;

        if length(name[i])=3 then
                begin
                card[i][1]:=10;
                end else
                begin
                if (name[i][1]>='2') and (name[i][1]<='9') then
                        card[i][1]:=ord(name[i][1])-48
                                else
                        case name[i][1] of
                                'A'             :card[i][1]:=1;
                                'J'             :card[i][1]:=11;
                                'Q'             :Card[i][1]:=12;
                                'K'             :card[i][1]:=13;
                        end;

                end;
        end;
end;

FUNCTION Compare(a,b:Integer):Integer;
begin
compare:=-1;
if (card[a][1]<card[b][1]) then exit;
compare:=1;
if (card[a][1]>card[b][1]) then exit;
if (card[a][2]<card[b][2]) then compare:=-1 else
if (card[a][2]=card[b][2]) then compare:=0;
end;

PROCEDURE Sort;
var
        i,j                     :Integer;
        temp                    :Integer;
begin
for i:=1 to 4 do
        for j:=i+1 to 5 do
                if compare(ordering[i],ordering[j])>0 then
                        begin
                        temp:=ordering[i];
                        ordering[i]:=ordering[j];
                        ordering[j]:=temp;
                        end;
end;

FUNCTION Check:Boolean;
var
        num                     :Integer;
        j,k                     :Integer;
        noww                    :array[1..2]of Integer;
begin
num:=card[ordering[chose[2]]][1];

k:=3;
for j:=4 to 5 do
        if compare(ordering[chose[j]],ordering[chose[k]])<0 then k:=j;

inc(num,k-2);
if num>13 then num:=num-13;

j:=0;
if (k<>3) then begin inc(j);noww[j]:=3; end;
if (k<>4) then begin inc(j);noww[j]:=4; end;
if (k<>5) then begin inc(j);noww[j]:=5; end;

if compare(ordering[chose[noww[1]]],ordering[chose[noww[2]]])>=0 then num:=num+3;
if num>13 then num:=num-13;
if num=card[ordering[chose[1]]][1] then check:=true else check:=false;
end;

PROCEDURE print;
var
        i                       :Integer;
begin
write('Problem ',p,':');
for i:=1 to 5 do
        write(' ',name[ordering[chose[i]]]);
writeln;
end;

PROCEDURE Main;
var
        i,j,k,p,q                       :Integer;
begin
for i:=1 to 5 do
        for j:=1 to 5 do
                if (i<>j) and (card[ordering[i]][2]=card[ordering[j]][2]) then
                for k:=1 to 5 do
                if (i<>k)and(j<>k) then
                for p:=1 to 5 do
                if (i<>p)and(j<>p)and(k<>p) then
                        begin
                        q:=1+2+3+4+5-i-j-k-p;
                        chose[1]:=i;
                        chose[2]:=j;
                        chose[3]:=k;
                        chose[4]:=p;
                        chose[5]:=q;
                        if check then
                                begin
                                print;
                                exit;
                                end;
                        end;
end;

BEGIN
//assign(input,'p.in');
//reset(input);
readln(part);
for p:=1 to part do
        begin
        Readin;
        Sort;
        Main;
        end;
END.

⌨️ 快捷键说明

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