Уровень: Средний
Условие задачи:
Определите количество троек элементов последовательности, в которых не более одного из трёх элементов являются одновременно четырёхзначными и чётными числами. А сумма элементов тройки не больше максимального элемента последовательности, оканчивающегося на 3 в девятеричной системе счисления.
В ответе запишите количество найденных троек чисел, затем максимальную из сумм элементов таких троек.
В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
Теоретическая справка:
В данной задаче полезно заметить, что найти число оканчивающееся на 3 в девятеричной системе счисления можно банальным делением, так как последняя цифра троичной записи будет являться первым остатком: x % 9 == 3.
Код решения:
Комментарии к коду:
- M = [int(x) for x in open('17.txt')]
Читаем данные из файла '17.txt', преобразуем каждую строку в целое число и создаем список M. - A = [x for x in M if len(str(abs(x))) == 4 and abs(x) % 2 == 0]
Создаем список A из чисел из M, которые имеют ровно 4 цифры и являются четными. - B = max([x for x in M if x % 9 == 3])
Находим максимальное значение среди чисел из M, которые при делении на 9 дают остаток 3, и сохраняем его в B. - R = []
Инициализируем пустой список R для хранения результатов сумм, удовлетворяющих условиям. - for i in range(len(M) - 2):
Проходим по списку M, используя индексы от 0 до (длина M - 3), чтобы избежать выхода за пределы при обращении к элементам M[i+2]. - x, y, z = M[i], M[i + 1], M[i + 2]
Выбираем три последовательных элемента списка M. - if (x in A) + (y in A) + (z in A) <= 1:
Проверяем условие, что среди трех выбранных чисел не более одного числа принадлежит списку A. - if (x + y + z) <= B:
Проверяем условие, что сумма трех выбранных чисел меньше или равна значению B. - R.append(x + y + z)
Если оба условия выполняются, добавляем сумму (x+y+z) в список R. - print(len(R), max(R))
Выводим количество элементов в списке R и максимальное значение в списке R.