Тема 17. Обработка числовой последовательности

17.01 Обработка пар элементов последовательности

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

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

Задача 1#60944

В файле содержится последовательность целых чисел. Элементы последовательности могут принимать целые значения от 0  до 100000  включительно. Определите и запишите в ответе через пробел сначала количество пар чисел, в которых оба элемента не превосходят остаток от деления суммы всех чисел в файле на 54321  и хотя бы у одного из них шестнадцатеричная запись числа оканчивается на B  , а затем, через пробел, — максимальное произведение элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

Вложения к задаче
Показать ответ и решение

Решение программой

Напишем программу, которая перебирает все пары подряд идущих чисел из файла. Для каждой пары проверяем два условия. Первое: оба числа не должны превышать остаток от деления суммы всех чисел файла на 54321. Для этого сначала вычисляем сумму всех чисел и берём остаток от деления на 54321.

Второе условие: хотя бы у одного из чисел шестнадцатеричная запись оканчивается на букву ’B’. Это можно проверить через остаток от деления числа на 16 — если он равен 11 (что соответствует ’B’ в шестнадцатеричной системе), значит условие выполнено.

Если оба условия выполняются, увеличиваем счётчик таких пар и обновляем максимальное произведение элементов этих пар. В конце выводим количество подходящих пар и максимальное произведение.

# открываем файл и считываем последовательность чисел
f = open("17.txt")
a = [int(s) for s in f.readlines()]

n = len(a)
counter = 0
maxim = -10**18  # инициализируем очень маленьким числом для максимума

# вычисляем остаток от деления суммы всех чисел на 54321
ost = sum(a) % 54321

# перебираем все пары подряд идущих элементов
for i in range(n - 1):
    x, y = a[i], a[i + 1]

    # проверяем, что оба числа не больше ost
    if x <= ost and y <= ost:
        # проверяем, что хотя бы одно число в шестнадцатеричной записи оканчивается на ’B’ (остаток от деления на 16 равен 11)
        if x % 16 == 11 or y % 16 == 11:
            counter += 1
            maxim = max(maxim, x * y)

# выводим количество таких пар и максимальное произведение
print(counter, maxim)

Ответ: 1054 816071011

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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