Тема 8. Комбинаторика

8.02 Подсчет количества слов/чисел

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела комбинаторика
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#59227

Ваня составляет пятибуквенные слова из букв К, О, Н, Ф, Е, Т, А. Он выбирает слова, которые содержат не менее двух гласных. Сколько различных слов может составить Ваня?

Показать ответ и решение

Решение руками

Посчитаем сколько всего слов мы можем составить без различных условий: 75 = 16807  . Посчитаем сколько слов можно составить без гласных: 45 = 1024  . Теперь посчитаем сколько слов можно составить с ровно одной гласной:     4
3 ∗4 ∗ 5 = 3840  . Чтобы определить количество слов, которые подходят по условию, нужно из общего количества слов вычесть те количества слов, которые не подходят по условию: 16807− 1024− 3840 = 11943

Решение через циклы
Составим программу для перебора всех пятибуквенных слов из букв К, О, Н, Ф, Е, Т, А. Для этого можно организовать 5 вложенных циклов, где каждый цикл отвечает за одну букву, причём порядок циклов совпадает с порядком букв слова. После формирования слова проверяем условие, что в слове встречается не менее двух гласных (для проверки используем генератор sum(s.count(i) for i in gl) >= 2, что возвращает True  , если количество гласных в слове не меньше двух). Если условие выполнено, увеличиваем счётчик ответа, добавляя слово в множество (используем set  , чтобы не учитывать одинаковые слова).

a = "КОНФЕТА"  # допустимые буквы
count = set()  # множество подходящих слов, чтобы не было повторов
gl = "ОЕА"  # гласные буквы

# организуем 5 вложенных циклов, где каждый цикл отвечает за одну букву слова
for x1 in a:  # первая буква
    for x2 in a:  # вторая буква
        for x3 in a:  # третья буква
            for x4 in a:  # четвёртая буква
                for x5 in a:  # пятая буква
                    s = x1 + x2 + x3 + x4 + x5  # формируем слово

                    # проверяем условие: в слове хотя бы две гласные
                    # используем sum и count по всем гласным: суммируем количество каждой гласной
                    if sum(s.count(i) for i in gl) >= 2:
                        count.add(s)  # если условие выполнено, добавляем слово в множество

print(len(count))  # выводим количество подходящих слов

Решение через itertools
Для перебора всех пятибуквенных комбинаций удобно использовать функцию product из модуля itertools, которая строит все возможные комбинации заданной длины, где каждая буква может использоваться несколько раз или не использоваться вовсе. После формирования слова преобразуем кортеж в строку, проверяем, что в нём встречается не менее двух гласных, используя генератор sum(s.count(i) for i in gl) >= 2. Если условие выполнено, увеличиваем счётчик ответа.

from itertools import product

gl = "ОЕА"  # гласные буквы
ans = []  # список подходящих слов

for i in product("КОНФЕТА", repeat=5):  # перебираем все 5-буквенные комбинации
    s = "".join(i)  # преобразуем кортеж в строку
    count_gl = sum(s.count(j) for j in gl)  # считаем количество гласных

    if count_gl >= 2:  # если гласных не менее двух
        ans.append(s)  # увеличиваем счётчик, добавляя слово в список

print(len(ans))  # количество подходящих слов

Ответ: 11943

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!