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

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

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

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

Задача 1#60306

Ростислав составляет слова из букв своего имени РОСТИСЛАВ. Слово должно состоять из 6 букв, каждая буква может встречаться любое число раз и не встречаться вообще. Кроме того, в слове количество согласных букв должно быть больше, чем количество гласных. Сколько различных слов может составить Ростислав?

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

В нашем наборе 3 гласных и 5 согласных.

Проще будет считать слова именно по количеству гласных букв, так как можно будет рассмотреть меньше случаев.

1) Слова без гласных

Тут всё просто, считаем следующим образом — 5*5*5*5*5*5 = 15625

2) Слова с одной гласной

3*5*5*5*5*5 = 9375, умножаем на 6, тем самым рассматривая гласную на 6 позициях. Получаем 56250.

3) Слова с двумя гласными

Посчитаем перестановки гласных без повторов — 6*5/2! = 15

15 умножаем на 3*3*5*5*5*5, получаем 84375.

Итого, 15625+56250+84375 = 156250.

Решение через циклы
Составляем программу для перебора всех 6-буквенных слов из букв РОСТИЛАВ. Для каждой комбинации формируем слово через сложение букв из вложенных циклов, затем считаем количество гласных с помощью метода count  . Если их меньше трёх, увеличиваем ответ. В конце выводим значение счётчика, что и будет количеством всех слов, удовлетворяющих условию.

s = "РОСТИЛАВ"  # набор допустимых букв
k = 0  # счётчик подходящих слов

for a in s:
    for b in s:
        for c in s:
            for d in s:
                for e in s:
                    for f in s:
                        w = a + b + c + d + e + f  # формируем слово
                        # Проверяем, что гласных меньше 3
                        if w.count("О") + w.count("И") + w.count("А") < 3:
                            k += 1  # увеличиваем счётчик, если слово подходит
print(k)  # выводим ответ

Решение через itertools
Используем функцию product  для генерации всех 6-буквенных комбинаций из букв РОСТИСЛАВ. Каждую комбинацию преобразуем в строку с помощью join  , затем считаем количество гласных. Если их меньше трёх, добавляем слово в множество, чтобы исключить дубликаты. В конце выводим длину множества, что и будет количеством всех допустимых слов.

from itertools import product

s = "РОСТИСЛАВ"  # набор допустимых букв
p = set()  # множество для хранения допустимых слов

for x in product(s, repeat=6):
    w = "".join(x)  # преобразуем кортеж в строку
    if w.count("О") + w.count("И") + w.count("А") < 3:
        p.add(w)  # добавляем слово в множество, если условие выполнено
print(len(p))  # выводим ответ

Ответ: 156250

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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