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

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

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

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

Задача 1#62636

Мирослав составляет коды из букв, входящих в его имя. Код должен состоять из 5 букв, буквы в коде не должны повторяться, согласных в коде должно быть больше, чем гласных, две гласные буквы нельзя ставить рядом. Код не должен начинаться с гласной буквы.

Сколько кодов может составить Мирослав?

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

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

Вариант 1: 3 согласные + 2 гласные

Возможные расположения (чтобы гласные не стояли рядом и не на первом месте):

С Г С Г С

С Г С С Г

С С Г С Г

Всего 3 варианта.

Выбор 3 из 5 согласных в алфавите: 3!(55−!3)! = 10  . Перестановки 3 согласных: 3! = 6  .

Выбор 2 из 3 гласных в алфавите: --3!--= 3
2!(3−2)!  . Перестановки 2 гласных: 2! = 2  .

Итого слов для 1 варианта: 10∗ 6∗3 ∗2∗ 3 = 1080  .

Вариант 2: 4 согласные + 1 гласная

Выбор 4 из 5 согласных в алфавите: 4!(55−!4)! = 5  .

Выбор 1 из 3 гласных в алфавите: --3!--= 3
1!(3−1)!  .

Позиции для гласной (не на первом месте): 4 варианта (позиции 2-5). Перестановки согласных: 4! = 24  .

Итого: 5 ∗3 ∗4∗ 24 = 1440  .

Вариант 3: 5 согласных + 0 гласных

Все 5 согласных можно переставить 5! = 120  способами.

Суммируем все полученные варианты: 1080+1440+120=2640.

Решение программой с помощью циклов:

Напишем программу для перебора всевозможных 5-буквенных слов из заданных букв. Для этого организуем 5  вложенных циклов (по одному на каждую позицию в слове). Каждый цикл перебирает буквы заданной строки, формируя все возможные комбинации. Запишем количество подходящих слов.

a = "МИРОСЛАВ" # Алфавит к задаче
g = "ИОА" # Гласные буквы к задаче
s = "МРСЛВ" # Согласные буквы к задаче
sochg = []
for i in g: # Запускаем два цикла для будущего определения отсутствия Г+Г
    for j in g:
        sochg.append(i+j) # В массив добавляем все возможные сочетания букв из списка гласных
count = 0 # Счётчик подходящих слов
for i in s:
    for j in a:
        for k in a:
            for l in a:
                for m in a:
                    w = i + j + k + l + m # Формируем слово
                    t = set(s) #
                    counts = len([i for i in w if i in s])
                    # Кол-во согласных
                    countg = len([i for i in w if i in g])
                    # Кол-во гласных
                    f = len([i for i in sochg if i in w])
                    #Кол-во сочетаний из списка sochg - Г+Г
                    # Если все буквы различны и согласных > гласных и нет определённых сочетаний
                    if len(set(w)) == 5 and counts > countg and f == 0:
                        count += 1 # Увеличим счётчик
print(count) # Выводим нужное количество

Решение программой с помощью модуля itertools:

Для решения задачи с помощью модуля itertools воспользуемся функцией product. Она, переставляя буквы, генерирует все возможные слова из заданного алфавита. Запишем количество подходящих слов.

from itertools import permutations

count = set() # Множество подходящих слов
g = "ИОА" # Гласные буквы к задаче
s = "МРСЛВ" # Согласные буквы к задаче
for x in permutations("МИРОСЛАВ", r = 5):
    s = "".join(x) # join объединяет буквы
    count_sogl = len([i for i in s if i in sogl]) # Количество согласных букв в слове
    count_gl = len([i for i in s if i in gl]) # Количество гласных букв в слове
    # Проверка, что слово начинается не с гласной буквы
    # Что количество согласных больше чем количество гласных букв и то, что нет рядом стоящих гласных букв
    if s[0] not in gl and count_sogl > count_gl and all(x1+x2 not in s for x1 in gl for x2 in gl):
        count.add(s) # Добавим в множество
print(len(count)) # Выведем нужную длину

Ответ: 2640

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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