p1331.dpr

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

DPR
101
字号
program p1331;

{$APPTYPE CONSOLE}

type
        node=record
                a,b,c,d:longint;
                end;

var
        map     :array[2..200]of longint;
        whether :array[8..8000000]of boolean;
        puss    :array[0..3]of longint;
        num     :integer;
        n       :longint;
        data    :array[1..300]of node;
PROCEDURE search(dep:integer);
var
        i       :longint;
begin
for i:=puss[dep-1] to 200 do
        begin
        puss[dep]:=i;
        if (dep=3) then
                begin
                {if (puss[1]=3)and(puss[2]=4)true then
                        begin
                        writeln(puss[1],puss[2],puss[3]);readln;
                        end;}
                if (map[puss[1]]+map[puss[2]]+map[puss[3]]<=8000000)and(whether[map[puss[1]]+map[puss[2]]+map[puss[3]]]) then
                        begin
                        inc(num);
                        data[num].a:=puss[1];
                        data[num].b:=puss[2];
                        data[num].c:=puss[3];
                        data[num].d:=map[puss[1]]+map[puss[2]]+map[puss[3]];
                        end;
                end else search(dep+1);
        end;


end;


PROCEDURE makemap;
var
        i,j     :longint;

begin
fillchar(whether,sizeof(whether),0);
for i:=2 to 200 do
        begin
        map[i]:=i*i*i;
        whether[map[i]]:=true;
        end;
end;

PROCEDURE sort;
var
        i,j     :integer;
        temp    :node;
begin
for i:=1 to num-1 do
        for j:=i+1 to num do
                if (data[i].d>data[j].d)or((data[i].d=data[j].d)and((data[i].a>data[j].a)or((data[i].a=data[j].a)and(data[i].b>data[j].b)))) then
                        begin
                        temp:=data[i];
                        data[i]:=data[j];
                        data[j]:=temp;
                        end;
end;

PROCEDURE print;
var
        i       :integer;
        j       :Integer;
        ma      :longint;
begin
for i:=1 to num do
begin
for j:=2 to 200 do
        if map[j]=data[i].d then
                begin
                ma:=j;
                break;
                end;
writeln('Cube = ',ma,',',' Triple = (',data[i].a,',',data[i].b,',',data[i].c,')');
end;
end;

begin
makemap;
puss[0]:=2;
num:=0;
search(1);
sort;
print;
readln;
end.

⌨️ 快捷键说明

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