Тема 27. Программирование

27.06 Макс/мин, кол-во пар, произведение кратно/не кратно

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела программирование
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#23514

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

Имеется набор данных, состоящий из положительных целых чисел. Необходимо найти наибольшее произведение двух элементов, с разными номерами, не кратное 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

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!