Последовательность натуральных чисел характеризуется
Входные данные.
Даны два входных файла
Пример организации исходных данных во входном файле:
5
40
1000
7
28
55
Пример выходных данных для приведённого выше примера входных данных:
28000 В ответе укажите два числа: сначала значение искомого произведения для
Ответ:
Произведение двух чисел делится
— либо один из сомножителей делится
— либо ни один из сомножителей не делится
Поэтому программа, вычисляющая
Программа читает все входные данные один раз, не запоминая все данные в массиве. Программа для прочитанного фрагмента входной последовательности хранит значения четырёх величин:
1) М7 — самое большое число,
2) M2 — самое большое число,
3) M14 — самое большое число,
4) МAX — самое большое число среди всех элементов последовательности, отличное от М14 (если
После того как все данные прочитаны, искомое
Ниже приведён пример программы на языке Паскаль, которая реализует описанный алгоритм.
Приведём решение задачи на языке 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.
В результате работы данного алгоритма при вводе данных из
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Юрия Лысакова на языке 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))
Приведём решение Игоря Орлова на PascalABC.NET:
//
{* Решение на языке PascalABC.Net
Решение для части А, читаем файл, разбиваем попарно, перемножаем, находим кратное 14.
Для файла B, решение получаем в течение получаса.
Решение для файла B:
Читаеmь все входные данные один раз,
Находим значения четырёх величин:
1) М7 — самое большое число, кратное 7, и не кратное 2;
2) M2 — самое большое число, кратное 2, и не кратное 7;
3) M14 — самое большое число, кратное 14;
4) МAX — самое большое число среди всех элементов последовательности, отличное от М14
(если число М14 встретилось более одного раза и оно же является максимальным, то MAX = M14).
После того как все данные прочитаны, искомое число X вычисляется как максимум из произведений М14 · MAX и М7 · М2
P.S. Не забываем удалить первый элеент файла, он не относится к данным.
*}
#ReadAlllines('a.txt').Skip(1).select(x->x.tobiginteger).Combinations(2).Select(x->x.product).Where(x->((x mod 14)=0)).max.print;
var m:=ReadAlllines('b.txt').skip(1).select(x->x.tointeger);
var m7:=m.Where(x->((x mod 7)=0) and ((x mod 2)<>0)).max;
var m2:=m.Where(x->((x mod 2)=0) and ((x mod 7)<>0)).max;
var m14:=m.Where(x->((x mod 14)=0)).max;
var count1:=m.Where(x->x=m14).count;
var max1:=m.Where(x->(x<>m14)).max;
if (count1 >1) and (m14=max1) then max1:=m14;
print(max(m14*max1,m7*m2));

