По моему так:
Число должно быть больше 103, следовательно, сначала надо подобрать нужное число.. если следовать условиям алгоритма, то это число 106. А теперь все просто мы применяем алгоритм в обратную сторону.
Переводим число в двоичную СС. получаем 1101010. Убираем две правых цифры. Остается 11010. Это 26 в десятичной СС.
Зверски, конечно, но максимум, что я придумал - снизить необходимый объём памяти... Впрочем, не актуально, ибо 256МеБ позволяют. В общем, вот:)
var
a: array [1..1000000] of integer;
b: array [1..3] of integer;
i, j, t, n: integer;
begin
assign(output, 'task1.out'); rewrite(output);
assign(input, 'task1.in'); reset(input); readln(n);
for i := 1 to n do
begin
read(a[i]);
write(' ');
end;
close(input);
for i := 1 to n do
for j := 1 to n do
for t := 1 to n do
if not ((i in [j, t]) or (j in [i, t]) or (t in [i, j])) then
if (b[1] * b[2] * b[3] < a[i] * a[j] * a[t]) then
begin
b[1] := a[i];
b[2] := a[j];
b[3] := a[t];
end;
writeln(b[1], ' ', b[2], ' ', b[3]);
end.
Прости, что так криво!!! Если что, могу перефотать.
K = 1 => s = 37;
k = 2 => s = 34;
k = 3 => s = 31;
k = 4 => s = 28;
k = 5 => s = 25;
k = 6 => s = 22;
k = 7 => s = 19;
Ответ: 19
28 - 100%
37 - x %
x = (37*100)/28 = 132,14 %
Отличается на 32,14 %