Последовательность натуральных чисел характеризуется
Входные данные.
Даны два входных файла
Пример организации исходных данных во входном файле:
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") # для файла A укажите его название
s = f.readlines()
n = int(s[0])
maxi = 0
max_0 = 0
max_2 = 0
max_7 = 0
max_14 = 0
count = []
for i in range(1, n + 1):
s[i] = int(s[i])
if s[i] % 14 == 0:
max_14 = max(max_14, s[i])
count.append(max_14)
elif s[i] % 7 == 0:
max_7 = max(max_7, s[i])
elif max_2 % 2 == 0:
max_2 = max(max_2, s[i])
else:
max_0 = max(max_0, s[i])
if count[0] == count [1]:
maxi = max_14**2
else:
maxi = max(max_14 * max(max_7, max_0, max_2), max_7 * max_2)
print(maxi)
Приведём решение Ивана Шубина на языке Java.
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class EGE {
public static void main(String[] args) throws Throwable {
BufferedReader reader = new BufferedReader(new FileReader("27-B_2.txt"));
int n = Integer.parseInt(reader.readLine());
List<Integer> list = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
list.add(Integer.parseInt(reader.readLine()));
}
list.sort(Comparator.reverseOrder());
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) continue;
int a = list.get(i);
int b = list.get(j);
int m = a * b;
if (m % 14 == 0) {
System.out.println(m);
return;
}
}
}
}
}
Приведём решение Ивана Шубина на на языке Python.
f = open('27-B_2.txt') # открываем файл
a = [int(line) for line in f] # создаём список, i-ый элемент которого является числом, полученным из i-ой строки
count = a.pop(0) # убираем из списка первое число, обозначающее количество элементов в нём (но запоминая его)
a.sort(reverse=True) # сортируем список по убыванию
for i in range(count):
for j in range(count):
if i == j: # исходя из условия нам подходят только разные (i, j)
continue
m = a[i] * a[j]
if m % 14 == 0:
# так как список отсортирован, произведение первой удовлетворяющей пары и будет максимальным
print(m)
exit(0)
Приведём решение Юрия Лысакова на языке 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))

