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

8.01 Слова в алфавитном порядке

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

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

Задача 1#22909

Все 5-буквенные слова, в составе которых могут быть буквы К, А, М, Е, О записаны в определённом порядке и пронумерованы, начиная с 1. Ниже приведено начало списка.

1. ККККК

2. ККККА

3. ККККМ

4. ККККЕ

5. ККККО

6. КККАК

Сколько слов, оканчивающихся на ОМ, между словами «КОМОК» и «ЕМКОМ»?

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

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

Преобразуем буквы в пятеричную систему счисления: К - 0, А - 1, М - 2, Е - 3, О - 4.

То есть нам нужно найти количество слов, оканчивающихся на 42 м еж ду 04240 и 32042
             5       5  .

Выпишем подходящие слова по порядке:

1. 04242

2. 04342

...

n. 31442.

Значит, нам нужно количество чисел от 425  до 3145  : 3145 − 425 + 1 = 84− 22 + 1 = 63  .

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

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

1. Переменная flag будет единицей, если слово находится между заданными условием.

2. Слово имеет нужное окончание (для этого условия будем складывать две последние буквы, имеющие индекс   − 1  и − 2  ) Обновим счётчик, если оба условия соблюдены.

flag = 0 # Переменная из условия 1
counter = 0 # Счётчик подходящих слов
for a1 in ("КАМЕО"):
    for a2 in ("КАМЕО"):
        for a3 in ("КАМЕО"):
            for a4 in ("КАМЕО"):
                for a5 in ("КАМЕО"):
                    s = a1 + a2 + a3 + a4 + a5 # Формируем слово
                    if s == "КОМОК": # Проверяем условие 1
                        flag = 1
                    if s == "ЕМКОМ":
                        flag = 0
                    counter += flag * (s[-2] + s[-1]) == "ОМ" # Если оба условия выполнены, то их перемножение даст 1 и счётчик увеличится
print(counter) # Выводим ответ

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

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

1. Переменная f будет единицей, если слово находится между заданными условием.

2. Слово имеет нужное окончание (для этого условия будем складывать две последние буквы, имеющие индекс   − 1  и − 2  ) Обновим счётчик, если оба условия соблюдены.

from itertools import *
t = product("КАМЕО", repeat = 5) # repeat обозначает количество букв, в заданных словах их 5
c, f = 0, 0 # Счётчик подходящих слов и f из условия 1
for i in t:
    s = "".join(i)
    if s == "КОМОК": # Проверяем условие 1
        f = 1
    if s == "ЕМКОМ":
        f = 0
    c += f * ((s[-2] + s[-1]) == "ОМ") # Если оба условия выполнены, то их перемножение даст 1 и счётчик увеличится
print(c) # Выводим ответ

Ответ: 63

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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