Решение. Произведение двух чисел делится на 14, если:
— либо один из сомножителей делится на 14 (второй может быть любым),
— либо ни один из сомножителей не делится на 14, но один из сомножителей делится на 7, а другой — на 2.
Поэтому программа, вычисляющая число X, может работать так.
Программа читает все входные данные один раз, не запоминая все данные в массиве. Программа для прочитанного фрагмента входной последовательности хранит значения четырёх величин:
1) М7 — самое большое число, кратное 7, но не кратное 2;
2) M2 — самое большое число, кратное 2, но не кратное 7;
3) M14 — самое большое число, кратное 14;
4) МAX — самое большое число среди всех элементов последовательности, отличное от М14 (если число М14 встретилось более одного раза и оно же является максимальным, то MAX = M14).
После того как все данные прочитаны, искомое число X вычисляется как максимум из произведений М14 · MAX и М7 · М2.
Ниже приведён пример программы на языке Паскаль, которая реализует описанный алгоритм.
Приведём решение задачи на языке Pascal.
var M7,M2,M14,MAX,dat,res,i,N: longint; var s: string;
begin
M7 := 0;
M2 := 0;
M14 := 0;
MAX := 0;
assign(input, '27-B_2.txt');
readln(N);
for i := 1 to N do
begin
readln(dat);
if ((dat mod 7) = 0) and ((dat mod 2) > 0) and (dat > M7) then
M7 := dat;
if ((dat mod 2) = 0) and ((dat mod 7) > 0) and (dat > M2) then
M2 := dat;
if (dat mod 14 = 0) and (dat > M14) then
begin
if M14 > MAX then MAX := M14;
M14 := dat
end
else
if dat > MAX then
MAX := dat;
end;
if (M7*M2 < M14*MAX) then
res := M14*MAX
else
res := M7*M2;
writeln(res);
end.
В результате работы данного алгоритма при вводе данных из файла A ответ — 447552, из файла B — 994000.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Юрия Лысакова на языке Python.
f = open('27-B_2.txt')
f.readline()
a = [int(i) for i in f]
a.sort()
a = a[::-1]
max1 = 0
for i in range(0,len(a)-1):
if a[i]*a[i+1] < max1: break
for j in range(i+1,len(a)):
if (a[i]*a[j]) % 14 == 0:
max1 = max(max1,a[i]*a[j])
print(max1)
Приведём решение Михаила Глинского на языке Python.
f = open('27-A_2.txt')
n = int(f.readline())
m = [int (x) for x in f]
m2 = [0]
m7 = [0]
m14 = [0]
ma = max(m)
for i in range(n):
if m[i]%14 == 0 and m[i]!= ma:
m14.append(m[i])
elif m[i]%7 == 0:
m7.append(m[i])
elif m[i]%2 == 0:
m2.append(m[i])
print(max(max(m2)*max(m7),max(m14)*ma))
Приведём решение Юрия Красильникова на языке Python:
a = [int(s) for s in open('27-B_2.txt')][1:]
m2 = [x for x in a if x%2 == 0 and x%7 !=0 ]
m7 = [x for x in a if x%7 == 0 and x%2 !=0 ]
m14 = [x for x in a if x%14 == 0]
if m14:
a.remove(max(m14))
ans1 = max(m2)*max(m7) if m2 and m7 else 0
ans2 = max(m14)*max(a) if m14 else 0
print(max(ans1,ans2))