ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Пары и тройки в числовых данных.
| КЭС: | 3.10 Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве |
| Тип ответа: | Краткий ответ |
Ответ: 150 9930
Решение.
В файле DEMO17.txt записаны натуральные числа. Двузначными являются числа от 10 до 99 включительно. Сначала найдём минимум только среди таких элементов всей последовательности. В исходном файле этот минимум равен 10; числа от 1 до 9 при его поиске не учитываются.
Рассмотрим все соседние пары x, y. Требование «только один» означает, что выполняется ровно одна из проверок 10 ≤ x ≤ 99 и 10 ≤ y ≤ 99. Два двузначных числа одновременно не подходят, как и два недвузначных.
В Python две логические проверки можно сравнить через !=: результат истинен, когда одна проверка истинна, а другая ложна. Дополнительно требуем (x + y) % minimum == 0.
Считаем пары, прошедшие обе проверки, и находим максимум их сумм. Программа:
Перед запуском сохраните скачанный файл под именем DEMO17.txt рядом с программой.
with open('DEMO_17.txt') as source:
numbers = [int(line) for line in source]
minimum = min(x for x in numbers if 10 <= x <= 99)
count = 0
largest_sum = 0
for left, right in zip(numbers, numbers[1:]):
exactly_one = (10 <= left <= 99) != (10 <= right <= 99)
if exactly_one and (left + right) % minimum == 0:
count += 1
largest_sum = max(largest_sum, left + right)
print(count, largest_sum)Файл содержит 4405 чисел; проверены все 4404 соседние пары. Подходят 150 пар, максимальная сумма равна 9930.
Проверка на конкретных парах:
| Позиция первого элемента | Пара | Сумма | Почему подходит |
|---|---|---|---|
| 19 | 10, 520 | 530 | только 10 двузначно; сумма кратна 10 |
| 32 | 95, 7055 | 7150 | только 95 двузначно; сумма кратна 10 |
| 4373 | 8, 92 | 100 | только 92 двузначно; сумма кратна 10 |
Позиции считаются с единицы. Независимая проверка количества десятичных цифр и всех индексов дала те же 150 пар и максимум 9930. В ответе соблюдаем порядок: сначала количество, затем сумма. Время O(N), память O(N).
Ответ: 150 9930.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF995419.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.