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

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

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

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

Задача 1#25768

Все 6  -буквенные слова, в составе которых могут быть буквы Р, С, К, Ы, Н, И, записаны в определённом порядке и пронумерованы, начиная с 1  . Ниже приведено начало списка.

1. CCCCCC

2. CCCCCЫ

3. СССССР

4. СССССН

5. СССССИ

6. СССССК

7. ССССЫС

Сколько слов между словами "КИСКИС"и "КЫСКЫС"?

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

Решение аналитически:

Пусть С = 0  , Ы = 1  , Р = 2  , Н = 3  , И = 4  , К = 5  в шестиричной системе счисления. Тогда слово «КЫСКЫС» равно 510510
      6  , слово «КИСКИС» равно 540540
      6  . Переведём в десятичную систему счисления: 510510 = 40362
      6       10  , 5405406 = 4426810  . Количество слов между ними равно 44268 − 40362 − 1 = 3905

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

Напишем программу для перебора всевозможных 6-буквенных слов из букв С, Ы, Р, Н, И, К. Для этого организуем       6  вложенных циклов (по одному на каждую позицию в слове). Каждый цикл перебирает буквы заданной строки, формируя все возможные комбинации. После составления очередного слова необходимо получить его номер, добавив к счётчику      1  . Запишем номера слов “КЫСКЫС” и “КИСКИС” в переменные, чтобы вычислить, сколько между ними оказалось слов.

s = "СЫРНИК" # Алфавит к задаче
count = 0 # Переменная, обозначающая номер текущего слова
start, finish = 0, 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:
                        slovo = a + b + c + d + e + f # Формируем слово
                        count += 1 # Обновляем номер слова
                        if slovo == "КЫСКЫС": # Проверяем получившееся слово, записываем его номер
                            start = count
                        if slovo == "КИСКИС":
                            finish = count
print(finish - start - 1) # Найдем разницу номеров. Такая разница учитывает лишнее слово, вычтем его для получения ответа.

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

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

from itertools import product
# Используем product. Порядок использования букв можно заметить в первых шести словах из условия.
# Сначала идёт С, далее добавляется Ы, Р, Н, И, К.
# Значит правильный порядок: ‘‘СЫРНИК’’.
start, finish = 0, 0 # Переменные, обозначающие номера нужных слов
count = 0 # Номер текущего слова
for i in product("СЫРНИК", repeat = 6): # repeat обозначает количество букв, в заданных словах их 6
    count += 1 # Обновим номер слова
    s = "".join(i) # join обьединит символы, оставим кавычки пустыми, чтобы получилось единое слово
    if s == "КЫСКЫС": # Проверяем получившееся слово, записываем его номер
        start = count
    if s == "КИСКИС":
        finish = count
print(finish - start - 1) # Найдем разницу номеров. Такая разница учитывает лишнее слово, вычтем его для получения ответа.

Ответ: 3905

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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