Задание 8 ЕГЭ по информатике: решайте с автопроверкой
Задание 8 о комбинаторике. Из набора букв составляют слова заданной длины, иногда с условиями: буква встречается определённое число раз, гласные не стоят рядом, буквы не повторяются. Нужно посчитать такие слова или найти номер слова в алфавитном списке.
Решать задачи номераКак решать программой
Программа решает такие задачи полным перебором. Функция itertools.product(letters, repeat=n) выдаёт все слова длины n в алфавитном порядке, если буквы записаны по алфавиту. Для слов без повторов есть itertools.permutations.
Условие проверяйте прямо в генераторе: метод count считает вхождения буквы, а соседние буквы удобно сравнивать через zip(w, w[1:]). Номер слова в списке — это порядковый номер в переборе, начиная с 1.
Перебор длится долго, только если слов миллионы. Для экзаменационных размеров он укладывается в секунды. Формулу можно вывести руками и проверить ею результат программы.
Задачи о номере слова решаются тем же перебором. Счётчик идёт вместе со словами, и когда слово совпало с искомым или впервые выполнилось условие, вы печатаете его номер. Не забудьте, что нумерация в задании начинается с единицы, а не с нуля.
Разбор примера
Из букв A, B, C, D, E составляют слова длины 5. Сколько слов содержат букву C ровно два раза?
from itertools import product
print(sum(1 for w in product('ABCDE', repeat=5) if w.count('C') == 2))Программа печатает
640
Две позиции для буквы C выбираются 10 способами, а на остальных трёх местах стоит любая из четырёх других букв: 4³ = 64. Всего 10 · 64 = 640, перебор даёт то же число.
Решить эту задачуЗадачи к заданию 8
- Буква ровно два разаЛёгкаяРешать
- Чётные номера без повторов подрядЛёгкаяРешать
- Без двух гласных подрядЛёгкаяРешать
- Разные цифры, чётность чередуетсяЛёгкаяРешать
- Номер слова в спискеЛёгкаяРешать
- Слово по номеруЛёгкаяРешать
- Буквы по алфавиту и хотя бы одна гласнаяЛёгкаяРешать
- Последний подходящий палиндромЛёгкаяРешать
- Одна особая цифра среди чётных соседейЛёгкаяРешать
- Перестановки без одинаковых соседейСредняяРешать
Бесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).
Вопросы и ответы
- Как получить слова в алфавитном порядке?
- Передайте в itertools.product буквы, записанные по алфавиту. Слова пойдут в нужном порядке.
- Как найти номер слова в списке?
- Перебирайте слова с enumerate(..., start=1) и печатайте номер, когда слово подошло.
- Можно ли обойтись формулой?
- Да, например здесь число сочетаний 10 умножают на 4³. Программа поможет проверить формулу.