Подсчёт слов: лексикографический список и перебор
Задание 8 · Билет 1 · ЕГЭ по информатике
Условие
Все пятибуквенные слова, составленные из букв С, Т, Р, О, К, А, записаны в алфавитном порядке и пронумерованы. Вот начало списка:
2. ААААК
3. ААААО
4. ААААР
5. ААААС
6. ААААТ
……
Примечание. Слово — последовательность идущих подряд букв, не обязательно осмысленная.
Попробуйте программой
Необязательно, но удобно: напишите здесь свой код на Python, который найдёт ответ. Если не получится — откройте решение и вставьте готовую программу одной кнопкой.
Решите программой на Python
в браузереНапишите свой код, который найдёт ответ, и нажмите «Выполнить». Горячая клавиша запуска: Ctrl/⌘ + Enter.
Разбор задачи
Задание 8 ЕГЭ по информатике — это лексикографический список слов. Из букв алфавита составляют все слова одной длины, записывают их в алфавитном порядке и нумеруют с 1. Нужно найти номер подходящего слова или посчитать, сколько слов удовлетворяют условию.
Ключевая идея: список слов — это «счёт» в системе счисления с основанием, равным числу букв. Для слов одной длины порядок совпадает с порядком чисел, поэтому перебор слов — то же самое, что перебор чисел. Остаётся аккуратно применить фильтры из условия.
Что важно знать
- Задание базового уровня — оценивается в 1 балл
- Нумерация слов — с 1, а не с 0
- Список слов одной длины — тот же порядок, что у чисел в системе с основанием m
- Фильтры (чётный номер, запрет первых букв, ровно две буквы) применяем при переборе
План решения
- Выпишите алфавит в порядке из условия и длину слова
- Посчитайте, сколько всего слов: m в степени L
- Переберите слова по порядку и примените фильтры
- Для вопроса «под каким номером» запомните последнее подходящее, для «сколько» — посчитайте все
- Сверьте: посмотрите слова вокруг ответа и убедитесь, что условие выполнено
Потренируйся перебирать слова по условию: тренажёр собирает слова в алфавитном порядке и учит находить номер или количество подходящих.
Решение
Теория с нуля: что нужно знать
Решение
открыто шагов: 6 из 6Программа, которая находит ответ:
from itertools import product # product перебирает все наборы букв
alphabet = 'АКОРСТ' # буквы в порядке из условия: А, К, О, Р, С, Т
bad = 'АСТ' # слова не должны начинаться с этих букв (А, С или Т)
i = 0 # номер слова (нумерация с 1)
last = None # здесь запомним номер последнего подходящего слова
for comb in product(alphabet, repeat=5): # берём очередной набор букв
i = i + 1 # это номер слова
w = ''.join(comb) # склеиваем буквы в слово
if i % 2 != 0: # номер нечётный, а нужен чётный — пропускаем
continue # переходим к следующему слову
if w[0] in bad: # слово начинается с А, С или Т — не подходит
continue # переходим к следующему слову
if w.count('О') != 2: # буква О должна встречаться ровно 2 раза
continue # иначе слово не подходит
last = i # слово прошло все фильтры — запоминаем его номер
print(last) # печатаем номер последнего подходящего слова — это ответ Проверка
Типовые ошибки и проверка
- Путают порядок букв (в условии он не всегда русский алфавит — смотрите начало списка).
- Нумеруют слова с 0, а нужно с 1.
- Находят первое подходящее слово вместо последнего.
- Пропускают фильтр «чётный номер» или запрещённые первые буквы.
- Проверка: выпишите слова вокруг ответа и убедитесь, что найденное — последнее подходящее.
Режимы
Сейчас открыт режим обучения: теория, разбор и ответ видны. Скоро появится режим проверки — только условие и поле ответа, без подсказок.
Практикум Все задания Режим проверки — скоро