Для записи результатов одного кругового турнира по шашкам (в котором каждый участник играет со всеми остальными) используется турнирная таблица, в каждой ячейки которой записано либо количество , полученных игроком: 1 – выигрыш, 0 – проигрыш, либо прочерк (если игра не состоялась). В каждом турнире участвуют 27 игроков. Для кодирования информации о каждой ячейке с результатом используется минимальное возможное количество битов, для хранения результатов одного турнира – минимальное возможное количество байтов. Сколько байтов потребуется для хранения результатов 6 турниров?
function Search(n: integer): integer;
var
input: array[1..4] of integer;
even: array[1..4] of integer;
atLestOne: boolean;
begin
input[1] := n div 1000;
input[2] := n mod 1000 div 100;
input[3] := n mod 100 div 10;
input[4] := n mod 10;
if (input[1] mod 2 = 0)
begin
even[1] := input[1];
atLestOne := True;
end;
if (input[2] mod 2 = 0)
begin
even[2] := input[2];
atLestOne := True;
end;
if (input[3] mod 2 = 0)
begin
even[3] := input[3];
atLestOne := True;
end;
if (input[4] mod 2 = 0)
begin
even[4] := input[4];
atLestOne := True;
end;
if atLestOne = True then
Search := Low(even)
else
Search := -1;
end;
С другой стороны, N-значное число больше 10^(N-2).
Для того, чтобы одно было равно другому, должно выполниться
10^(N - 2) < 10000N, 10^N < N * 10^6.
Так может быть, только если N < 7, поэтому ищем числа среди 1..999999.
Код:
function Sum4Deg(n: integer): integer;
var
s: integer;
begin
s := 0;
repeat
s := s + sqr(sqr(n mod 10));
n := n div 10;
until n = 0;
Sum4Deg := s;
end;
var
i: integer;
begin
for i := 1 to 999999 do
if i = Sum4Deg(i) then
writeln(i);
end.