Задание повышенного уровня сложности, на выполнение которого отводится 14 минут. Задание проверяет умение составлять алгоритм обработки числовой последовательности и записывать его в виде программы на языке программирования.
Условие задачи
К заданию прилагается файл с последовательностью натуральных чисел. Необходимо определить количество пар в последовательности, где остаток от деления хотя бы одного из элементов на 16 равен минимальному элементу последовательности. В ответе требуется указать количество найденных пар и максимальную из сумм элементов этих пар. Под парой подразумеваются два идущих подряд элемента последовательности.
Решение задачи
Решение задачи включает следующие шаги:
- Считывание данных: Файл с числовой последовательностью (предполагается, что он находится в той же директории, что и код программы) открывается с помощью функции open(). Каждое число считывается построчно, преобразуется в целочисленный тип и добавляется в список.
with open('input.txt') as f:
numbers = [int(line) for line in f]
- Нахождение минимального элемента: Минимальный элемент последовательности определяется с помощью функции min().
min_number = min(numbers)
- Поиск пар и суммирование: Создаётся пустой список sums для хранения сумм пар. Цикл перебирает элементы списка numbers. Для каждой пары соседних элементов проверяется условие: остаток от деления хотя бы одного элемента на 16 равен минимальному элементу. Если условие выполняется, сумма элементов пары добавляется в sums.
sums = []
for i in range(len(numbers) - 1):
if (numbers[i] % 16 == min_number) or (numbers[i+1] % 16 == min_number):
sums.append(numbers[i] + numbers[i+1])
- Вывод результата: Выводится количество найденных пар (длина списка sums) и максимальная сумма из списка sums.
print(len(sums), max(sums) if sums else 0)
Полный код программы:
with open('input.txt') as f:
numbers = [int(line) for line in f]
min_number = min(numbers)
sums = []
for i in range(len(numbers) - 1):
if (numbers[i] % 16 == min_number) or (numbers[i+1] % 16 == min_number):
sums.append(numbers[i] + numbers[i+1])
print(len(sums), max(sums) if sums else 0)
Программа выводит два числа: количество пар, удовлетворяющих условию, и максимальную сумму элементов среди этих пар. Пример ответа: 12214 17624. Обработка случая пустого списка sums предотвращает ошибку max() arg is an empty sequence.