Задача к ЕГЭ по информатике на тему «Макс/мин, кол-во пар, произведение кратно/не кратно» №1

Задание выполняется с использованием прилагаемых файлов

Имеется набор данных, состоящий из положительных целых чисел. Необходимо найти наибольшее произведение двух элементов, с разными номерами, не кратное 5  . Гарантируется, что хотя бы одно такое произведение в последовательности есть. Программа должна напечатать одно число — максимально возможное произведение, которое соответствует условиям задачи.

Входные данные:

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 100000).  Каждая из следующих N  строк содержит натуральное число, не превышающих 1000  .

Пример организации исходных данных во входном файле:

4

75

82

23

69

Для указанных входных данных значением искомого произведения должно быть 5658  .

В ответе укажите два числа: сначала значение искомого произведения для файла А, затем для файла B. Полученные значения запишите через пробел.

Переборное решение

# Читаем все числа в файле
with open(’Задание 27 A.txt’, ’r’) as f:
    nums = list(map(int, f.readlines()))


n = nums[0]  # Первое число в файле N
nums = nums[1:]  # Последовательность чисел без N
ans = 0  # Искомое произведение

# Перебираем все возможные пары чисел
for i in range(n):
    for j in range(i + 1, n):
        f, s = nums[i], nums[j]  # f, s - первое и второе число из пары соответственно

        if (f * s) % 5 != 0:  # Если пара нам подходит (произведение не кратно 5)
            ans = max(ans, f * s)  # Обновляем искомое произведение если оно меньше текущего


print(ans)  # Выводим ответ

Статическое решение

Чтобы произведение двух чисел не было кратно 5, нужно чтобы оба этих числа не были кратны 5. Чтобы получить максимальное произведение — достаточно найти два таких наибольших числа и перемножить.

f = open(’Задание 27 B.txt’, ’r’)  # Открываем файл
n = int(f.readline())  # Читаем число N

mn5 = -1000000000000000000001  # Максимальное число не кратное 5
pr_mn5 = -1000000000000000000001  # Предмаксимальное число не кратное 5


for i in range(n):  # Проходимся по всем числам последовательности
    x = int(f.readline())  # Очередное число из последовательности
    if x % 5 != 0:  # Если число нам подходит (не кратно 5)
    
# Если оно больше максимума или предмаксимума, то обновляем их
        if x > mn5:
            pr_mn5 = mn5
            mn5 = x
        elif x > pr_mn5:
            pr_mn5 = x


print(mn5 * pr_mn5)  # Выводим ответ
f.close()  # Закрываем файл

Динамическое решение

f = open("27.txt")
n = int(f.readline())

max_nekr5 = -10 ** 20  # Максимальное число не кратное 5
ans = -10 ** 20

for i in range(n):
    x = int(f.readline())

    if x % 5 != 0:
        # Если оно больше максимума или предмаксимума, то обновляем их
        ans = max(ans, max_nekr5 * x)
        max_nekr5 = max(max_nekr5, x)

print(ans)

Ответ: 704871 998001
Оцените статью
Я решу все!