program CheckPythagoreanTriplet;
procedure SortArray(var arr: array of Integer);
var
i, j, temp, len: Integer;
begin
len := Length(arr);
for i := 0 to len - 2 do
for j := 0 to len - 2 - i do
if arr[j] > arr[j + 1] then
begin
temp := arr[j];
arr[j] := arr[j + 1];
arr[j + 1] := temp;
end;
end;
function ContainsPythagoreanTripletNumbers(arr: array of Integer): Boolean;
var
i, j, k, len: Integer;
squares: array of Integer;
begin
len := Length(arr);
SetLength(squares, len);
// Square all elements
for i := 0 to len - 1 do
squares[i] := arr[i] * arr[i];
// Sort using our new procedure
SortArray(squares);
// Check for triplet
for i := len - 1 downto 2 do
begin
j := 0;
k := i - 1;
while j < k do
begin
if squares[j] + squares[k] = squares[i] then
Exit(True)
else if squares[j] + squares[k] < squares[i] then
Inc(j)
else
Dec(k);
end;
end;
ContainsPythagoreanTripletNumbers := False;
end;
var
input: array[0..4] of Integer = (4, 7, 3, 1, 5); // 3*3 + 4*4 = 5*5 // 9 + 16 = 25
begin
if ContainsPythagoreanTripletNumbers(input) then
WriteLn('The array contains a Pythagorean triplet.')
else
WriteLn('The array does not contain a Pythagorean triplet.');
end.
(*
run:
The array contains a Pythagorean triplet.
*)