Обработка целочисленной информации: поиск пар в файле
Задание 17 · Билет 1 · ЕГЭ по информатике
Условие
В файле содержится последовательность натуральных чисел. Её элементы могут принимать целые значения от 1 до 100000 включительно. Определите количество пар последовательности, в которых только один из элементов является двузначным числом, а сумма элементов пары кратна минимальному двузначному элементу последовательности.
Скачивать не обязательно: если решаете на сайте, данные уже есть в программе. Скачайте, только чтобы посмотреть файл отдельно на компьютере.
Попробуйте программой
Необязательно, но удобно: напишите здесь свой код на Python, который найдёт ответ. Если не получится — откройте решение и вставьте готовую программу одной кнопкой.
Решите программой на Python
в браузереНапишите свой код, который найдёт ответ, и нажмите «Выполнить». Горячая клавиша запуска: Ctrl/⌘ + Enter.
Файл задачи уже в песочнице: task17-1-cisla.txt — читайте через open('task17-1-cisla.txt').
Разбор задачи
Задание 17 ЕГЭ по информатике — обработка последовательности чисел из файла. Нужно просмотреть все пары двух подряд идущих элементов, отобрать подходящие по условию и записать два числа: их количество и наибольшую (или наименьшую) сумму.
Файл содержит тысячи чисел, поэтому вручную не перебрать: задачу решают короткой программой. Порог (например, минимальный двузначный элемент) и условие на пару берут прямо из условия задачи.
Что важно знать
- Задание базового уровня — оценивается в 1 балл
- Пара — это два подряд идущих элемента последовательности
- Порог берётся из самой последовательности: например, минимальный двузначный элемент
- В ответ идут два числа: количество пар и максимум суммы (иногда по модулю)
План решения
- Прочитайте файл и получите список целых чисел
- Найдите порог из условия (минимальный подходящий элемент последовательности)
- Переберите пары соседних элементов
- Отберите пары, где выполнено условие на элементы и сумму
- Посчитайте количество и наибольшую (или наименьшую) сумму
- Запишите два числа через пробел и проверьте решение на коротком наборе
Потренируйся обрабатывать числа: напиши программу, найди пары по условию и посчитай их количество и сумму.
Решение
Теория с нуля: что нужно знать
Решение
открыто шагов: 4 из 4Программа, которая находит ответ:
data = [int(x) for x in open('task17-1-cisla.txt').read().split()] # читаем файл
m = min(x for x in data if 10 <= x <= 99) # минимальный двузначный элемент
cnt = 0 # число подходящих пар
mx = 0 # максимальная сумма
for x, y in zip(data, data[1:]): # перебираем соседние пары
one_two = (10 <= x <= 99) + (10 <= y <= 99) # сколько элементов двузначны
if one_two == 1 and (x + y) % m == 0: # ровно один и сумма кратна m
cnt += 1
mx = max(mx, x + y)
print(cnt, mx) # выводим ответ Проверка
Типовые ошибки и проверка
- Считают пары из любых двух элементов, а не только подряд идущих.
- Берут фиксированный порог, а не минимальный элемент последовательности по условию.
- Путают «ровно один двузначный» с «есть двузначный»: подходит пара, где двузначен строго один элемент.
- Забывают про абсолютное значение, когда максимальная сумма отрицательна.
- Проверка: прогоните решение на коротком наборе вручную, затем сверьте количество и сумму на полном файле.
Режимы
Сейчас открыт режим обучения: теория, разбор и ответ видны. Скоро появится режим проверки — только условие и поле ответа, без подсказок.
Практикум Все задания Режим проверки — скоро