Задание 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³. Программа поможет проверить формулу.