← Все вопросы

Задание 8 КЕГЭ: сколько слов по правилу — как перебрать itertools.product?

Задан 4 месяца назад522 просмотров4 ответа
14

Типичное восьмое: «Сколькоershesть слов длины 5 из букв К, О, Т, в которых не две гласные подряд» и подобное. Считать комбинаторикой страшно ошибиться. Как тупо перебрать все слова на Python и просто посчитать подходящие?

4 ответа

27
✓ Принятый ответ — помог автору

Генеришь все слова product, фильтруешь условие, считаешь длину.

from itertools import product

alphabet = 'КОТ'
count = 0
for w in product(alphabet, repeat=5):
    word = ''.join(w)
    # пример условия: не начинается с гласной и нет двух гласных подряд
    glas = set('О')
    if word[0] in glas:
        continue
    if any(word[i] in glas and word[i+1] in glas for i in range(4)):
        continue
    count += 1
print(count)

Плюс подхода: переводишь словесное условие напрямую в if-ы, не выводя формулу. Размер перебора маленький (3**5 = 243), считается мгновенно. Главное — аккуратно прочитать ВСЕ ограничения из условия и каждое превратить в проверку.

Семён Новиков Перебор всегда надёжнее комбинаторики на экзамене, если кол-во слов влезает · 3 месяца назад
9

itertools.product(alphabet, repeat=n), потом if под каждое условие и += 1.

5

Осторожно с длиной: при repeat=10 и алфавите из 10 букв это 10 миллиардов — не успеет. Но в реальных задачах 8 перебор почти всегда влезает, там обычно ≤ нескольких миллионов.

Сергей Волков да, если перебор большой — тогда уже комбинаторика или ДП · 3 месяца назад
4

Перебором.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект