Задание 8: комбинаторика — сколько слов и чисел удовлетворяют условию

Считаем количество слов/чисел по заданным правилам — формулой, когда видно умножение, и перебором, когда правила запутаны.

Правило умножения: если первый выбор можно сделать a способами, второй — b способами (независимо), то вместе — a·b способов.

Что проверяет задание 8

Задание 8 — базовый уровень, 1 балл. Дан алфавит из нескольких букв (или цифр), длина слова и набор ограничений: какие буквы где можно ставить, какие пары запрещены, сколько раз буква встречается. Нужно посчитать, сколько различных слов (чисел) удовлетворяют условиям.

На КЕГЭ это задание идеально для перебора кодом: алфавит маленький, длина небольшая, общее число вариантов — тысячи или десятки тысяч, перебор отрабатывает мгновенно. Формулы тоже работают, но в них легко ошибиться на хитром условии, а перебор «тупой и надёжный».

Теория: два инструмента

Формула умножения

Если на каждую позицию буква выбирается независимо от других, число слов — это произведение количеств вариантов по позициям. Пример: 5-буквенные слова из алфавита в 4 буквы, где первая — гласная (2 варианта), остальные — любые (4 варианта): 2·4·4·4·4 = 512.

Перебор

Когда условия связывают соседние буквы («никакие две гласные не стоят рядом», «после Т обязательно идёт А»), удобнее перебрать все слова и для каждого проверить условие. В Python это itertools.product (с повторениями букв) или itertools.permutations (если каждая буква используется один раз).

ИнструментКогда
product(A, repeat=n)буквы можно повторять, слово длины n
permutations(A, n)каждая буква не более одного раза

Метод решения перебором

  1. Запишите алфавит и длину слова.
  2. Сгенерируйте все слова: product(alphabet, repeat=length).
  3. Для каждого слова проверьте ВСЕ условия задачи; если все выполнены — увеличьте счётчик.
  4. Выведите счётчик.

Главное — аккуратно перевести словесные ограничения в проверки if. Каждое «нельзя» — это continue, пропускающий слово.

Разбор примера

Алфавит — буквы слова «КОМАР»: К, О, М, А, Р. Гласные — О и А. Сколько 5-буквенных слов можно составить (буквы можно повторять), если слово начинается с гласной и никакие две гласные не стоят рядом?

Условие 1: первая буква ∈ {О, А}. Условие 2: для каждой пары соседних букв нельзя, чтобы обе были гласными. Считать формулой громоздко (гласные «расставлены» нерегулярно), поэтому перебираем.

Решение на Python

from itertools import product

letters = "КОМАР"
vowels = "ОА"
count = 0

for w in product(letters, repeat=5):
    s = ''.join(w)
    # условие 1: начинается с гласной
    if s[0] not in vowels:
        continue
    # условие 2: никакие две гласные не стоят рядом
    bad = any(s[i] in vowels and s[i+1] in vowels for i in range(len(s)-1))
    if bad:
        continue
    count += 1

print("Количество слов:", count)

Вывод:

Количество слов: 558

Перебрано 5⁵ = 3125 слов, условиям удовлетворяют 558. Ноль шансов ошибиться в комбинаторной формуле — машина проверила всё.

Вариант с неповторяющимися буквами

Если в задаче «каждая буква используется не более одного раза», меняем product на permutations. Пример: слова длины 4 из букв А, Е, К, Н, Т (А, Е — гласные), буквы не повторяются, никакие две гласные не рядом.

from itertools import permutations

letters = "АЕКНТ"
vowels = "АЕ"
count = 0

for w in permutations(letters, 4):     # выбираем 4 разные буквы из 5
    s = ''.join(w)
    if any(s[i] in vowels and s[i+1] in vowels for i in range(3)):
        continue
    count += 1

print("Слов длины 4:", count)

Вывод:

Слов длины 4: 84

Типичные ошибки

  • Путают повторение букв. «Буквы можно повторять» → product; «каждая буква один раз» → permutations. Это меняет ответ в разы.
  • Считают порядок не там, где надо. В словах порядок важен (АБ ≠ БА); если в задаче «набор» или «множество», порядок не важен — это уже сочетания.
  • Теряют граничную пару. Соседние пары — это индексы от 0 до n−2; цикл range(len(s)-1).
  • Забывают одно из условий. Каждое ограничение — отдельная проверка; пропустил одну — ответ завышен.

Итог

  • Алфавит маленький — перебор itertools решает задание 8 надёжнее формул.
  • product(repeat=n) — с повторениями, permutations(A, n) — без повторений.
  • Каждое словесное ограничение переводите в отдельную проверку if … continue.
Проверьте себя
1. Буквы в слове можно повторять. Какой инструмент перебора подходит?
Apermutations(alphabet, n)
Bproduct(alphabet, repeat=n)
Ccombinations(alphabet, n)
Dsorted(alphabet)
2. Сколько 5-буквенных слов из алфавита {А, Б, В, Г}, где первая буква А, посчитает формула умножения (без других условий)?
A4⁵ = 1024
B1·4·4·4·4 = 256
C5·4 = 20
D4! = 24
3. В задаче сказано «никакие две гласные не стоят рядом». Как это проверить в коде?
AПосчитать общее число гласных
BПроверить, что соседние буквы s[i] и s[i+1] не обе гласные, для всех i
CПроверить только первую и последнюю буквы
DОтсортировать буквы
Поддержать проект