17.02 Обработка троек элементов последовательности
Ошибка.
Попробуйте повторить позже
В файле содержится последовательность целых чисел. Элементы последовательности – четырёхзначные натуральные
числа. Найдите все тройки элементов последовательности, для которых восьмеричная запись произведения разрядов всех
чисел из тройки представляет собой палиндром, а среднее арифметическое всех чисел тройки больше, чем среднее
арифметическое всех чисел в файле, кратных . В ответе запишите количество найденных троек, затем, через пробел,
максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента
последовательности
Решение программой
Напишем программу, которая перебирает все тройки подряд идущих элементов последовательности. Для каждой тройки вычисляем произведение всех цифр каждого числа, а затем перемножаем эти произведения между собой. Полученное число переводим в восьмеричную систему счисления. Если восьмеричная запись этого произведения является палиндромом (читается одинаково слева направо и справа налево), то переходим к следующей проверке.
Следующая проверка — среднее арифметическое чисел тройки должно быть больше среднего арифметического всех чисел в файле, которые делятся на 88. Для этого сначала находим все числа, кратные 88, считаем их среднее. Потом для каждой тройки сравниваем среднее арифметическое с этим значением.
Если обе проверки выполняются, считаем такую тройку подходящей: увеличиваем счётчик и запоминаем максимальную сумму элементов таких троек. В конце выводим количество таких троек и максимальную сумму.
# Функция для перевода числа в восьмеричную систему счисления def vosem(n): x = n s = ’’ while x > 0: s = str(x % 8) + s x = x // 8 return s # Функция для вычисления произведения цифр числа def p(n): pr = 1 x = n while x > 0: pr *= x % 10 x = x // 10 return pr # открываем файл и считываем числа f = open("17.txt") a = [int(s) for s in f.readlines()] # находим все числа, кратные 88 b = [x for x in a if x % 88 == 0] # вычисляем среднее арифметическое чисел, кратных 88 sr = sum(b) / len(b) n = len(a) counter = 0 maxim = -100000000000000000 # перебираем все тройки подряд идущих элементов for i in range(n - 2): x, y, z = a[i], a[i + 1], a[i + 2] # произведение произведений цифр каждого из трёх чисел t = p(x) * p(y) * p(z) # переводим это число в восьмеричную систему s = vosem(t) # проверяем, является ли восьмеричная запись палиндромом if s == s[::-1]: # проверяем среднее арифметическое тройки if (x + y + z) / 3 > sr: counter += 1 maxim = max(maxim, x + y + z) # выводим количество подходящих троек и максимальную сумму print(counter, maxim)
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!