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

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

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

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

Задача 21#7275Максимум баллов за задание: 1

Алина составляет 6-буквенные слова из букв Б, Ю, Д, Ж, Е, Т. Каждая из букв может встречаться в слове только один раз, причём буква Б должна стоять первой, а буква Ю — второй. Сколько различных слов может составить Алина?

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

Алина ставит на первое место букву Б, а на второе — Ю. На третье место она ставит любую из 4 оставшихся букв, т.к. 2 буквы уже использованы, на четвёртое — одну из 3 оставшихся, на пятое — одну из 2 оставшихся и на последнее место оставшуюся букву. Всего Алина может составить 1 ⋅ 1 ⋅ 4 ⋅ 3 ⋅ 2 ⋅ 1 = 24  различных слова.
Идея решения через циклы:

Для генерации 6-буквенных слов используем вложенные циклы по буквам Б, Ю, Д, Ж, Е, Т. Проверяем уникальность букв, используя множество, и что первая буква — Б, вторая — Ю. Каждое подходящее слово добавляем во множество для учёта уникальных вариантов.

Решение кодом через циклы:

# Множество для уникальных слов
ans = set()

# Буквы алфавита
alf = "БЮДЖЕТ"

# Перебор всех 6-буквенных комбинаций
for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    for x6 in alf:
                        w = x1 + x2 + x3 + x4 + x5 + x6
                        # Проверка уникальности букв и первых двух букв
                        if len(w) == len(set(w)) and x1 == "Б" and x2 == "Ю":
                            ans.add(w)

# Вывод количества уникальных слов
print(len(ans))

Идея решения через itertools:

Используем функцию permutations для генерации всех перестановок длиной 6 без повторов. Проверяем, что первая буква — Б, вторая — Ю, и добавляем подходящие слова во множество для подсчёта.

Решение кодом через itertools:

# Импорт функции permutations
from itertools import permutations

# Множество для уникальных слов
ans = set()

# Буквы алфавита
alf = "БЮДЖЕТ"

# Генерация всех перестановок длиной 6
for x in permutations(alf, 6):
    # Проверка первых двух букв
    if x[0] == "Б" and x[1] == "Ю":
        ans.add("".join(x))

# Вывод количества уникальных слов
print(len(ans))

Ответ: 24

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

Задача 22#7276Максимум баллов за задание: 1

Полина составляет 5-буквенные слова из букв С, Т, Р, Е, Л, К, И. Каждая из букв может встречаться в слове любое количество раз или не встречаться вовсе, причём буква С в слове должна стоять первой. Сколько различных слов может составить Полина?

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

Полина ставит на первое место букву С, а на оставшиеся 4 места любую из 7 букв. Всего Полина может составить 1 ⋅ 7 ⋅ 7 ⋅ 7 ⋅ 7 = 2401  различное слово.
Идея решения через циклы:

Для генерации 5-буквенных слов используем вложенные циклы по буквам С, Т, Р, Е, Л, К, И. Проверяем, что первая буква слова — С. Каждое подходящее слово добавляем во множество для учёта уникальных вариантов.

Решение кодом через циклы:

# Множество для уникальных слов
ans = set()

# Буквы алфавита
alf = "СТРЕЛКИ"

# Перебор всех 5-буквенных комбинаций
for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    w = x1 + x2 + x3 + x4 + x5
                    # Проверка, что первая буква — С
                    if x1 == "С":
                        ans.add(w)

# Вывод количества уникальных слов
print(len(ans))

Идея решения через itertools:

Используем функцию product для генерации всех 5-буквенных комбинаций с повторениями. Проверяем, что первая буква — С, и добавляем подходящие слова во множество для подсчёта.

Решение кодом через itertools:

# Импорт функции product
from itertools import product

# Множество для уникальных слов
ans = set()

# Буквы алфавита
alf = "СТРЕЛКИ"

# Генерация всех 5-буквенных комбинаций
for x in product(alf, repeat=5):
    # Проверка, что первая буква — С
    if x[0] == "С":
        ans.add("".join(x))

# Вывод количества уникальных слов
print(len(ans))

Ответ: 2401

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

Задача 23#7277Максимум баллов за задание: 1

Аня составляет 6-буквенные слова из букв П, О, С, Т, У, Л, Е, Н, И. Каждая из букв может встречаться в слове ровно один раз или не встречаться вовсе, причём буква О в слове должна стоять второй. Сколько различных слов может составить Аня?

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

Аня ставит на второе место букву О. На первое место она ставит любую из 8 оставшихся букв, т.к. 1 буква уже использована. По той же логике, на третье — одну из 7 оставшихся, на четвертое — одну из 6 оставшихся, на пятое — одну из 5 оставшихся и на последнее место она ставит одну из 4 оставшихся букв. Всего Аня может составить 8 ⋅ 1 ⋅ 7 ⋅ 6 ⋅ 5 ⋅ 4 = 6720  различное слов.
Идея решения через циклы:

Для генерации 6-буквенных слов используем вложенные циклы по буквам П, О, С, Т, У, Л, Е, Н, И. Проверяем уникальность букв, используя множество, и что вторая буква слова — О. Каждое подходящее слово добавляем во множество для учёта уникальных вариантов.

Решение кодом через циклы:

# Множество для уникальных слов
ans = set()

# Буквы алфавита
alf = "ПОСТУЛЕНИ"

# Перебор всех 6-буквенных комбинаций
for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    for x6 in alf:
                        w = x1 + x2 + x3 + x4 + x5 + x6
                        # Проверка уникальности букв и второй буквы
                        if len(w) == len(set(w)) and x2 == "О":
                            ans.add(w)

# Вывод количества уникальных слов
print(len(ans))

Идея решения через itertools:

Используем функцию permutations для генерации всех перестановок длиной 6 без повторов. Проверяем, что вторая буква — О, и добавляем подходящие слова во множество для подсчёта.

Решение кодом через itertools:

# Импорт функции permutations
from itertools import permutations

# Множество для уникальных слов
ans = set()

# Буквы алфавита
alf = "ПОСТУЛЕНИ"

# Генерация всех перестановок длиной 6
for x in permutations(alf, 6):
    # Проверка второй буквы
    if x[1] == "О":
        ans.add("".join(x))

# Вывод количества уникальных слов
print(len(ans))

Ответ: 6720

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

Задача 24#7278Максимум баллов за задание: 1

Паша составляет 6-буквенные слова из букв Ф, И, З, К, А. Каждая из букв может встречаться в слове любое количество раз или не встречаться совсем, причём слово не может оканчиваться на букву Ф. Сколько различных слов может составить Паша?

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

Паша ставит на последнее место любую из 4 букв, не включая букву Ф, т.к. на это место её ставить нельзя. На остальные 5 мест Паша ставит любую из 5 букв. Всего Паша может составить 5 ⋅ 5 ⋅ 5 ⋅ 5 ⋅ 5 ⋅ 4 = 12500  различных слов.

Решение кодом через циклы:

Мы перебираем все возможные 6-буквенные комбинации из букв Ф, И, З, К, А с помощью 6 вложенных циклов, по одному на каждую позицию слова.

Последняя буква не может быть Ф, поэтому для шестого цикла используем набор букв без Ф.

Каждое сформированное слово увеличивает счётчик, так как дополнительных условий нет. В конце счётчик показывает общее количество допустимых слов.

# Доступные буквы для первых пяти позиций
a = ’ФИЗКА’
# Доступные буквы для последней позиции (без ’Ф’)
a1 = ’ИЗКА’
count = 0 # Счётчик допустимых слов

# Перебор всех возможных комбинаций по позициям
for x1 in a:
    for x2 in a:
        for x3 in a:
            for x4 in a:
                for x5 in a:
                    for x6 in a1:  # Последняя буква не может быть ’Ф’
                        s = x1+x2+x3+x4+x5+x6 # Формируем слово
                        count += 1 # Увеличиваем счётчик
print(count) # Выводим результат

Решение кодом через itertools:

С помощью функции product из модуля itertools генерируем все возможные 6-буквенные комбинации с повторениями.

Проверяем, что последняя буква не равна Ф. Если условие выполнено, увеличиваем счётчик. В конце получаем общее количество допустимых слов.

from itertools import product

count = 0 # Счётчик допустимых слов

# Перебор всех 6-буквенных комбинаций с повторениями
for x in product(’ФИЗКА’, repeat=6):
    s = ’’.join(x) # Формируем слово из кортежа
    if s[-1] != ’Ф’: # Проверяем, что последняя буква не ’Ф’
        count += 1 # Увеличиваем счётчик
print(count) # Выводим результат

Ответ: 12500

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

Задача 25#7279Максимум баллов за задание: 1

Дима составляет 6-буквенные слова из букв В, С, Е, Р, О, Л, И. Каждая из букв может встречаться в слове ровно один раз или не встречаться совсем, причём буква С не может стоять первой и/или последней. Сколько различных слов может составить Дима?

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

Первой буквой Дима может поставить любую из букв, кроме С, т.е. одну из 6 букв. Последней буквой Дима может поставить любую из 5 оставшихся букв, т.е. без первой уже использованной и без буквы С. На второе место в слове Дима может поставить любую из 5 ещё не использованных букв, на третье — любую из 4 оставшихся букв, на четвёртое — любую из 3 оставшихся, и на пятое — любую из 2 оставшихся. Всего Дима может составить 6 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 ⋅ 5 = 3600  различных слов.
Решение кодом через циклы:

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

После формирования слова проверяем условия:

1. Все буквы уникальны. Для этого преобразуем слово в множество с помощью set(w). Множество хранит только уникальные элементы, поэтому если длина множества равна 6, значит все буквы различны.

2. Буква С не стоит на первой или последней позиции. Проверяем, что x1 != ’С’ и x6 != ’С’.

Если слово удовлетворяет этим условиям, добавляем его в множество ans, чтобы автоматически исключить дубликаты.

# создаем пустое множество для хранения уникальных слов
ans = set()

# набор букв для формирования слов
alf = ’ВСЕРОЛИ’

# первая буква
for x1 in alf:
    # вторая буква
    for x2 in alf:
        # третья буква
        for x3 in alf:
            # четвертая буква
            for x4 in alf:
                # пятая буква
                for x5 in alf:
                    # шестая буква
                    for x6 in alf:
                        # формируем слово
                        w = x1 + x2 + x3 + x4 + x5 + x6
                        # Проверяем условия:
                        # 1. Все буквы уникальны
                        # 2. Буква С не на первой и последней позиции
                        if len(w) == len(set(w)) and x1 != ’С’ and x6 != ’С’:
                            # добавляем слово во множество
                            ans.add(w)
# выводим количество допустимых слов
print(len(ans))

Решение кодом через itertools:

Более удобный способ — использовать модуль itertools и функцию permutations. Она генерирует все возможные перестановки заданного набора букв без повторений. Так как буквы должны встречаться ровно один раз, проверка уникальности уже выполняется автоматически.

Далее проверяем только условие: буква С не может быть первой или последней.

# импортируем функцию для генерации перестановок
from itertools import permutations

# создаем множество для хранения слов
ans = set()

# исходный набор букв
alf = ’ВСЕРОЛИ’

# перебираем все перестановки длиной 6
for x in permutations(alf, 6):
    # проверяем условие по первой и последней букве
    if x[0] != ’С’ and x[-1] != ’С’:
        # добавляем слово во множество
        ans.add(x)
# выводим количество допустимых слов
print(len(ans))

Ответ: 3600

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

Задача 26#7280Максимум баллов за задание: 1

Борис составляет 5-буквенные слова из букв Ш, А, Л, Ы, К. Каждая из букв может встречаться в слове любое количество раз или не встречаться совсем, причём первой буквой не может быть гласная. Сколько различных слов может составить Борис?

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

Первой буквой Борис может поставить любую из букв, кроме гласных А и Ы, т.е. одну из 3 букв Ш, Л, К. На остальные 4 места Борис ставит любую из 5 букв. Всего Борис может составить 3 ⋅ 5 ⋅ 5 ⋅ 5 ⋅ 5 = 1875  различных слов.
Решение кодом через циклы:

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

После формирования слова проверяем условие: первая буква не является гласной. Если условие выполнено, добавляем слово в множество ans, чтобы автоматически исключить дубликаты.

# создаем пустое множество для хранения уникальных слов
ans = set()

# набор букв для формирования слов
alf = ’ШАЛЫК’

# первая буква
for x1 in alf:
    # вторая буква
    for x2 in alf:
        # третья буква
        for x3 in alf:
            # четвертая буква
            for x4 in alf:
                # пятая буква
                for x5 in alf:
                    # формируем слово
                    w = x1 + x2 + x3 + x4 + x5
                    # проверяем, что первая буква не гласная (А или Ы)
                    if x1 not in ’АЫ’:
                        # добавляем слово во множество
                        ans.add(w)
# выводим количество допустимых слов
print(len(ans))

Решение кодом через itertools:

Более удобный способ — использовать модуль itertools и функцию product. Она генерирует все возможные комбинации с повторениями заданной длины из букв алфавита. Так как буквы могут повторяться, это именно то, что нам нужно.

После генерации комбинации проверяем только условие: первая буква не гласная. Если условие выполнено, добавляем комбинацию в множество ans.

# импортируем функцию product для генерации всех комбинаций с повторениями
from itertools import product

# создаем множество для хранения слов
ans = set()

# исходный набор букв
alf = ’ШАЛЫК’

# перебираем все комбинации длиной 5 с повторениями
for x in product(alf, repeat=5):
    # проверяем, что первая буква не гласная (А или Ы)
    if x[0] not in ’АЫ’:
        # добавляем комбинацию во множество
        ans.add(x)
# выводим количество допустимых слов
print(len(ans))

Ответ: 1875

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

Задача 27#7281Максимум баллов за задание: 1

Александр составляет пары слов. Первое 3-буквенное слово состоит из букв М, О, Д, а второе 4-буквенное из букв С, П, И, Н. Каждая из букв может встречаться в словах любое количество раз или не встречаться вовсе. Сколько различных пар слов может составить Александр?

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

В первом слове на каждое из 3 мест в слове можно поставить любую из 3 различных букв. Значит первое слово можно составить 3 ⋅ 3 ⋅ 3 = 27  способами. Во втором слове на каждое из 4 мест в слове можно поставить любую из 4 различных букв. Значит второе слово можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 = 256  способами.

Представим, что первые слова — чашки, а вторые слова — блюдца. Сколько различных вариаций кружка+чашка можно составить?

Можно составить 27 ⋅ 256 = 6912  различных пар слов (блюдец с чашкой).
Решение кодом через циклы:

Для решения задачи с помощью циклов мы будем формировать все возможные пары слов. Первое слово имеет длину 3 буквы, поэтому создаём три вложенных цикла — каждый цикл перебирает все буквы из набора МОД для одной позиции слова. Второе слово имеет длину 4 буквы, и мы создаём четыре вложенных цикла — каждый перебирает буквы из набора СПИН для соответствующей позиции второго слова.

После того как сформировано первое и второе слово, мы объединяем их в пару и добавляем в множество ans. Множество автоматически хранит только уникальные элементы, поэтому одинаковые пары слов не будут посчитаны дважды. В этой задаче дополнительных условий нет — буквы могут повторяться и занимать любые позиции.

Таким образом, программа перебирает все возможные комбинации букв для каждого слова, формирует пары и считает уникальные варианты.

# создаем пустое множество для хранения уникальных пар слов
ans = set()

# набор букв для первого слова
alf1 = ’МОД’

# набор букв для второго слова
alf2 = ’СПИН’

# перебор всех букв для первой позиции первого слова
for x1 in alf1:
    # перебор всех букв для второй позиции первого слова
    for x2 in alf1:
        # перебор всех букв для третьей позиции первого слова
        for x3 in alf1:
            # формируем первое слово
            w1 = x1 + x2 + x3
            # перебор всех букв для первой позиции второго слова
            for y1 in alf2:
                # перебор всех букв для второй позиции второго слова
                for y2 in alf2:
                    # перебор всех букв для третьей позиции второго слова
                    for y3 in alf2:
                        # перебор всех букв для четвертой позиции второго слова
                        for y4 in alf2:
                            # формируем второе слово
                            w2 = y1 + y2 + y3 + y4
                            # добавляем пару слов во множество
                            ans.add((w1, w2))
# выводим количество уникальных пар слов
print(len(ans))

Решение кодом через itertools:

Более удобный и компактный способ — использовать модуль itertools и функцию product. Эта функция позволяет сгенерировать все возможные комбинации с повторениями для заданной длины слова. Так как буквы могут повторяться и ограничений на позиции нет, product идеально подходит.

Сначала генерируем все комбинации длиной 3 для первого слова, затем для каждой такой комбинации генерируем все комбинации длиной 4 для второго слова. После этого формируем пару слов и добавляем её в множество ans, чтобы исключить повторения. Такой подход полностью повторяет логику циклов, но код получается короче и нагляднее.

# импортируем функцию product для генерации всех комбинаций с повторениями
from itertools import product

# создаем множество для хранения уникальных пар слов
ans = set()

# набор букв для первого слова
alf1 = ’МОД’

# набор букв для второго слова
alf2 = ’СПИН’

# перебираем все комбинации длиной 3 для первого слова
for x in product(alf1, repeat=3):
    # перебираем все комбинации длиной 4 для второго слова
    for y in product(alf2, repeat=4):
        # добавляем пару слов во множество
        ans.add((x, y))
# выводим количество уникальных пар слов
print(len(ans))

Ответ: 6912

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

Задача 28#7282Максимум баллов за задание: 1

Николай составляет пары слов. Первое 2-буквенное слово состоит из букв Я, Д, а второе 5-буквенное из букв Л, А, Т, Е, Х. Каждая из букв может встречаться в словах любое количество раз или не встречаться вовсе. Сколько различных пар слов может составить Николай?

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

В первом слове на каждое из 2 мест в слове можно поставить любую из 2 различных букв. Значит первое слово можно составить 2 ⋅ 2 = 4  способами. Во втором слове на каждое из 5 мест в слове можно поставить любую из 5 различных букв. Значит второе слово можно составить 5 ⋅ 5 ⋅ 5 ⋅ 5 ⋅ 5 = 3125  способами.

Представим, что первые слова — чашки, а вторые слова — блюдца. Сколько различных вариаций кружка+чашка можно составить?

Можно составить 4 ⋅ 3125 = 12500  различных пар слов (блюдец с чашкой).
Решение кодом через циклы:

Для решения задачи с помощью циклов создаём вложенные циклы для каждой позиции слова: два цикла для первого слова (2 буквы) и пять циклов для второго слова (5 букв). Внутри каждого цикла перебираем все возможные буквы из соответствующего набора.

После формирования слова объединяем первое и второе слово в пару и добавляем её во множество ans, чтобы хранить только уникальные пары. В этой задаче дополнительных условий нет, поэтому каждое сформированное слово или пара сразу добавляется в множество.

В конце программы выводим количество элементов множества, что соответствует числу всех уникальных пар слов.

# создаем пустое множество для хранения уникальных пар слов
ans = set()

# набор букв для первого слова
alf1 = ’ЯД’

# набор букв для второго слова
alf2 = ’ЛАТЕХ’

# перебор всех букв для первой позиции первого слова
for x1 in alf1:
    # перебор всех букв для второй позиции первого слова
    for x2 in alf1:
        # формируем первое слово
        w1 = x1 + x2
        # перебор всех букв для первой позиции второго слова
        for y1 in alf2:
            # перебор всех букв для второй позиции второго слова
            for y2 in alf2:
                # перебор всех букв для третьей позиции второго слова
                for y3 in alf2:
                    # перебор всех букв для четвертой позиции второго слова
                    for y4 in alf2:
                        # перебор всех букв для пятой позиции второго слова
                        for y5 in alf2:
                            # формируем второе слово
                            w2 = y1 + y2 + y3 + y4 + y5
                            # добавляем пару слов во множество
                            ans.add((w1, w2))
# выводим количество уникальных пар слов
print(len(ans))

Решение кодом через itertools:

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

После формирования пары слов добавляем её в множество ans, чтобы сохранять только уникальные варианты. В конце программы выводим количество элементов множества, что соответствует числу всех уникальных пар слов.

# импортируем функцию product для генерации всех комбинаций с повторениями
from itertools import product

# создаем множество для хранения уникальных пар слов
ans = set()

# набор букв для первого слова
alf1 = ’ЯД’

# набор букв для второго слова
alf2 = ’ЛАТЕХ’

# перебираем все комбинации длиной 2 для первого слова
for x in product(alf1, repeat=2):
    # перебираем все комбинации длиной 5 для второго слова
    for y in product(alf2, repeat=5):
        # добавляем пару слов во множество
        ans.add((x, y))
# выводим количество уникальных пар слов
print(len(ans))

Ответ: 12500

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

Задача 29#7283Максимум баллов за задание: 1

Даниил составляет пары слов. Первое 3-буквенное слово состоит из букв М, А, Г, а второе 6-буквенное из букв Ц, А, Р, Ь. Каждая из букв первого слова может встречаться в нём ровно один раз, а каждая из букв второго слова может встречаться в нём любое количество раз или не встречаться совсем. Сколько различных пар слов может составить Даниил?

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

В первом слове Даниил первой буквой может поставить любую из 3 доступных букв, второй буквой — любую из оставшихся 2, а третьей последнюю оставшуюся букву. Значит первое слово можно составить 3 ⋅ 2 ⋅ 1 = 6  способами. Во втором слове на каждое из 6 мест в слове можно поставить любую из 4 различных букв. Значит второе слово можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 ⋅ 4 ⋅ 4 = 4096  способами.

Представим, что первые слова — чашки, а вторые слова — блюдца. Сколько различных вариаций кружка+чашка можно составить?

Можно составить 6 ⋅ 4096 = 24576  различных пар слов (блюдец с чашкой).
Решение кодом через циклы:

Для решения задачи с помощью циклов создаём вложенные циклы для каждой позиции первого слова (3 цикла, по одной букве из набора М, А, Г). После формирования комбинации проверяем, что все буквы уникальны с помощью сравнения длины строки и длины множества букв.

Для второго слова используем шесть вложенных циклов (по одной букве из набора Ц, А, Р, Ь). Каждая комбинация второго слова формируется без проверки на уникальность, так как буквы могут повторяться.

После формирования первого и второго слова объединяем их в пару и добавляем во множество ans, чтобы хранить только уникальные пары. В конце программы выводим количество элементов множества.

# создаем пустое множество для хранения уникальных пар слов
ans = set()

# набор букв для первого слова
alf1 = ’МАГ’

# набор букв для второго слова
alf2 = ’ЦАРЬ’

# перебор всех букв для первой позиции первого слова
for x1 in alf1:
    # перебор всех букв для второй позиции первого слова
    for x2 in alf1:
        # перебор всех букв для третьей позиции первого слова
        for x3 in alf1:
            # формируем первое слово
            w1 = x1 + x2 + x3
            # проверяем, что все буквы первого слова уникальны
            if len(w1) == len(set(w1)):
                # перебор всех букв для первой позиции второго слова
                for y1 in alf2:
                    # перебор всех букв для второй позиции второго слова
                    for y2 in alf2:
                        # перебор всех букв для третьей позиции второго слова
                        for y3 in alf2:
                            # перебор всех букв для четвертой позиции второго слова
                            for y4 in alf2:
                                # перебор всех букв для пятой позиции второго слова
                                for y5 in alf2:
                                    # перебор всех букв для шестой позиции второго слова
                                    for y6 in alf2:
                                        # формируем второе слово
                                        w2 = y1 + y2 + y3 + y4 + y5 + y6
                                        # добавляем пару слов во множество
                                        ans.add((w1, w2))
# выводим количество уникальных пар слов
print(len(ans))

Решение кодом через itertools:

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

Каждое полученное сочетание первого и второго слова объединяем в пару и добавляем во множество ans. В конце программы выводим количество элементов множества, что соответствует числу всех уникальных пар слов.

# импортируем функции для генерации перестановок и комбинаций с повторениями
from itertools import permutations, product

# создаем множество для хранения уникальных пар слов
ans = set()

# набор букв для первого слова
alf1 = ’МАГ’

# набор букв для второго слова
alf2 = ’ЦАРЬ’

# перебираем все перестановки длиной 3 для первого слова
for x in permutations(alf1, 3):
    # перебираем все комбинации длиной 6 для второго слова
    for y in product(alf2, repeat=6):
        # добавляем пару слов во множество
        ans.add((x, y))
# выводим количество уникальных пар слов
print(len(ans))

Ответ: 24576

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

Задача 30#7284Максимум баллов за задание: 1

Мария составляет пары слов. Первое 4-буквенное слово состоит из букв Д, Р, У, Г, а второе 4-буквенное из букв В, Р, А, Г. Каждая из букв слов может встречаться в них любое количество раз или не встречаться совсем. Сколько различных пар слов может составить Мария?

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

В первом слове на каждое из 4 мест в слове можно поставить любую из 4 различных букв. Значит первое слово можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 = 256  способами. Во втором слове на каждое из 4 мест в слове можно поставить любую из 4 различных букв. Значит второе слово можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 = 256  способами.

Представим, что первые слова — чашки, а вторые слова — блюдца. Сколько различных вариаций кружка+чашка можно составить?

Можно составить 256 ⋅ 256 = 65536  различных пар слов (блюдец с чашкой).
Решение кодом через циклы:

Для решения задачи с помощью циклов создаём вложенные циклы для каждой позиции первого слова (четыре цикла, по одной букве из набора Д, Р, У, Г). Каждая комбинация формируется и присваивается переменной w1.

Для второго слова используем четыре вложенных цикла (по одной букве из набора В, Р, А, Г). Каждая комбинация второго слова формируется и присваивается переменной w2.

После формирования первого и второго слова объединяем их в пару и добавляем во множество ans, чтобы хранить только уникальные пары. В конце программы выводим количество элементов множества, что соответствует числу всех уникальных пар слов.

# создаем пустое множество для хранения уникальных пар слов
ans = set()

# набор букв для первого слова
alf1 = ’ДРУГ’

# набор букв для второго слова
alf2 = ’ВРАГ’

# перебор всех букв для первой позиции первого слова
for x1 in alf1:
    # перебор всех букв для второй позиции первого слова
    for x2 in alf1:
        # перебор всех букв для третьей позиции первого слова
        for x3 in alf1:
            # перебор всех букв для четвертой позиции первого слова
            for x4 in alf1:
                # формируем первое слово
                w1 = x1 + x2 + x3 + x4
                # перебор всех букв для первой позиции второго слова
                for y1 in alf2:
                    # перебор всех букв для второй позиции второго слова
                    for y2 in alf2:
                        # перебор всех букв для третьей позиции второго слова
                        for y3 in alf2:
                            # перебор всех букв для четвертой позиции второго слова
                            for y4 in alf2:
                                # формируем второе слово
                                w2 = y1 + y2 + y3 + y4
                                # добавляем пару слов во множество
                                ans.add((w1, w2))
# выводим количество уникальных пар слов
print(len(ans))

Решение кодом через itertools:

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

Каждое полученное сочетание первого и второго слова объединяем в пару и добавляем во множество ans. В конце программы выводим количество элементов множества, что соответствует числу всех уникальных пар слов.

# импортируем функцию для генерации комбинаций с повторениями
from itertools import product

# создаем множество для хранения уникальных пар слов
ans = set()

# набор букв для первого слова
alf1 = ’ДРУГ’

# набор букв для второго слова
alf2 = ’ВРАГ’

# перебираем все комбинации длиной 4 для первого слова
for x in product(alf1, repeat=4):
    # перебираем все комбинации длиной 4 для второго слова
    for y in product(alf2, repeat=4):
        # добавляем пару слов во множество
        ans.add((x, y))
# выводим количество уникальных пар слов
print(len(ans))

Ответ: 65536

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

Задача 31#7285Максимум баллов за задание: 1

Семён составляет пары слов. Первое 4-буквенное слово состоит из букв Г, О, Д, а второе 5-буквенное из букв К, Р, Ы, С. Каждая из букв слов может встречаться в них любое количество раз или не встречаться совсем, причём второе слово должно оканчиваться на букву Ы. Сколько различных пар слов может составить Семён?

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

В первом слове на каждое из 4 мест в слове можно поставить любую из 3 различных буквы. Значит первое слово можно составить 3 ⋅ 3 ⋅ 3 ⋅ 3 = 81  способом. Во втором слове последней должна стоять буква Ы, а на каждое из 4 оставшихся мест в слове можно поставить любую из 4 различных букв. Значит второе слово можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 ⋅ 1 = 256  способами.

Представим, что первые слова — чашки, а вторые слова — блюдца. Сколько различных вариаций кружка+чашка можно составить?

Можно составить 81 ⋅ 256 = 20736  различных пар слов (блюдец с чашкой).
Решение кодом через циклы:

Решение кодом через циклы заключается в полном переборе всех возможных комбинаций букв для первого и второго слова. Сначала создаем множество ans, в котором будем хранить уникальные пары, и определяем строки alf1 = ’ГОД’ и alf2 = ’КРЫС’ для букв первого и второго слова соответственно. Для формирования первого 4-буквенного слова используем четыре вложенных цикла, в которых каждая переменная (x1, x2, x3, x4) перебирает все буквы из alf1 и на каждой итерации объединяется в строку w1 = x1 + x2 + x3 + x4. Для второго слова используем пять вложенных циклов, где переменные (y1, y2, y3, y4, y5) перебирают все буквы из alf2 и формируют строку w2 = y1 + y2 + y3 + y4 + y5. После формирования второго слова проверяем, что последняя буква y5 равна ’Ы’, и только тогда добавляем пару (w1, w2) в множество ans. В конце работы программы выводим количество элементов множества len(ans), что и будет ответом на задачу.

# Создаем множество для хранения уникальных пар слов
ans = set()
# Определяем буквы для первого слова
alf1 = ’ГОД’
# Определяем буквы для второго слова
alf2 = ’КРЫС’

# Перебираем все буквы для первой позиции первого слова
for x1 in alf1:
    # Перебираем все буквы для второй позиции первого слова
    for x2 in alf1:
        # Перебираем все буквы для третьей позиции первого слова
        for x3 in alf1:
            # Перебираем все буквы для четвертой позиции первого слова
            for x4 in alf1:
                # Формируем первое слово
                w1 = x1 + x2 + x3 + x4
                # Перебираем буквы для первой позиции второго слова
                for y1 in alf2:
                    for y2 in alf2:
                        for y3 in alf2:
                            for y4 in alf2:
                                for y5 in alf2:
                                    # Формируем второе слово
                                    w2 = y1 + y2 + y3 + y4 + y5
                                    # Проверяем, что последняя буква второго слова ’Ы’
                                    if y5 == ’Ы’:
                                        # Добавляем пару слов в множество
                                        ans.add((w1, w2))
# Выводим количество уникальных пар
print(len(ans))

Решение кодом через itertools:

Для более компактного решения можно использовать функцию product из модуля itertools, которая генерирует все возможные комбинации букв с повторениями. Сначала импортируем функцию и определяем буквы для первого и второго слова так же, как в цикловом решении. С помощью product(alf1, repeat=4) формируем все 4-буквенные последовательности для первого слова, а product(alf2, repeat=5) формируем все 5-буквенные последовательности для второго слова. Каждую комбинацию преобразуем в строку, и если последняя буква второго слова равна ’Ы’, добавляем кортеж из двух слов в множество ans. В конце выводим длину множества, что и даст искомое количество пар.

from itertools import product

# Создаем множество для хранения уникальных пар слов
ans = set()
# Буквы для первого слова
alf1 = ’ГОД’
# Буквы для второго слова
alf2 = ’КРЫС’

# Перебираем все возможные комбинации букв первого слова
for x in product(alf1, repeat=4):
    # Перебираем все возможные комбинации букв второго слова
    for y in product(alf2, repeat=5):
        # Проверяем, что последняя буква второго слова ’Ы’
        if y[-1] == ’Ы’:
            # Добавляем пару слов в множество
            ans.add((x, y))

# Выводим количество уникальных пар
print(len(ans))

Ответ: 20736

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

Задача 32#7286Максимум баллов за задание: 1

Всеволод составляет пары слов. Первое 4-буквенное слово состоит из букв Р, О, Б, Т, а второе 5-буквенное из букв К, И, Б, О, Р, Г. Каждая из букв первого слова может встречаться в нём любое количество раз или не встречаться совсем, а каждая из букв второго слова должна встречаться в нём ровно 1 раз или не встречаться совсем. Сколько различных пар слов может составить Всеволод?

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

В первом слове Всеволод на каждое из 4 мест в слове можно поставить любую из 4 различных буквы. Значит первое слово можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 = 256  способами. Во втором слове на первое место можно поставить любую из 6 имеющихся букв, на второе — любую из 5 оставшихся, т.к. одна уже использована, на третье — любую из 4 оставшихся, на четвёртое — любую из 3 оставшихся и на пятое — любую из 2 оставшихся букв. Значит второе слово можно составить 6 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 = 720  способами.

Представим, что первые слова — чашки, а вторые слова — блюдца. Сколько различных вариаций кружка+чашка можно составить?

Можно составить 256 ⋅ 720 = 184320  различных пар слов (блюдец с чашкой).
Решение кодом через циклы:

Решение через циклы строится на полном переборе всех возможных комбинаций букв для первого и второго слова. Сначала создаём пустое множество ans, в котором будем хранить уникальные пары слов, и определяем строки alf1 = ’РОБТ’ и alf2 = ’КИБОРГ’ для букв первого и второго слова соответственно. Для формирования первого 4-буквенного слова используем четыре вложенных цикла, в которых переменные x1, x2, x3, x4 перебирают все буквы из alf1 и формируют строку w1 = x1 + x2 + x3 + x4. Для второго слова используем пять вложенных циклов, где переменные y1, y2, y3, y4, y5 перебирают все буквы из alf2 и формируют строку w2 = y1 + y2 + y3 + y4 + y5. После формирования второго слова проверяем условие, что все буквы уникальны, используя конструкцию len(w2) == len(set(w2)), и если оно выполняется, добавляем пару (w1, w2) в множество ans. В конце программы выводим len(ans), что и будет ответом на задачу.

# Создаем множество для хранения уникальных пар слов
ans = set()
# Определяем буквы для первого слова
alf1 = ’РОБТ’
# Определяем буквы для второго слова
alf2 = ’КИБОРГ’

# Перебор всех возможных букв первой позиции первого слова
for x1 in alf1:
    # Перебор всех возможных букв второй позиции первого слова
    for x2 in alf1:
        # Перебор всех возможных букв третьей позиции первого слова
        for x3 in alf1:
            # Перебор всех возможных букв четвертой позиции первого слова
            for x4 in alf1:
                # Формируем первое слово
                w1 = x1 + x2 + x3 + x4
                # Перебор букв первой позиции второго слова
                for y1 in alf2:
                    for y2 in alf2:
                        for y3 in alf2:
                            for y4 in alf2:
                                for y5 in alf2:
                                    # Формируем второе слово
                                    w2 = y1 + y2 + y3 + y4 + y5
                                    # Проверяем, что все буквы второго слова уникальны
                                    if len(w2) == len(set(w2)):
                                        # Добавляем пару слов в множество
                                        ans.add((w1, w2))
# Выводим количество уникальных пар слов
print(len(ans))

Решение кодом через itertools:

Для более компактного и удобного решения используем модуль itertools. Функция product позволяет сгенерировать все 4-буквенные комбинации для первого слова с повторениями, а функция permutations генерирует все 5-буквенные перестановки второго слова без повторений. Сначала импортируем нужные функции, затем определяем буквы для первого и второго слова. Для каждого сочетания первого слова и перестановки второго слова формируем кортеж и добавляем его в множество ans. После перебора всех комбинаций выводим количество уникальных пар слов, используя len(ans).

from itertools import product, permutations

# Создаем множество для хранения уникальных пар слов
ans = set()
# Буквы для первого слова
alf1 = ’РОБТ’
# Буквы для второго слова
alf2 = ’КИБОРГ’

# Перебираем все 4-буквенные комбинации для первого слова с повторениями
for x in product(alf1, repeat=4):
    # Перебираем все 5-буквенные перестановки второго слова без повторений
    for y in permutations(alf2, 5):
        # Добавляем пару слов в множество
        ans.add((x, y))

# Выводим количество уникальных пар слов
print(len(ans))

Ответ: 184320

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

Задача 33#7292Максимум баллов за задание: 1

Друг составляет четырёхзначные числа, используя цифры от 1  до 9  включительно. Цифры в числе могут повторяться. Сколько различных чисел, начинающихся с цифр 1  или 2  , друг может составить?

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

Первой цифрой числа может быть либо 1  , либо 2  . На 2  , 3  и 4  месте в слове может стоять любая из 9  цифр. Значит друг может составить 2 ⋅ 9 ⋅ 9 ⋅ 9 = 1458  различных чисел.
Решение кодом через циклы:

Решение через циклы строится на полном переборе всех четырёхзначных комбинаций цифр от 1 до 9. Сначала создаём пустое множество ans, в котором будем хранить уникальные числа, и определяем строку alf = ’123456789’ с доступными цифрами. Для формирования числа используем четыре вложенных цикла, в которых переменные x1, x2, x3, x4 перебирают все цифры из alf и формируют строку w = x1 + x2 + x3 + x4. После формирования числа проверяем, что первая цифра (x1) равна ’1’ или ’2’. Если условие выполняется, добавляем число в множество ans. В конце работы программы выводим len(ans), что и будет ответом.

# Создаем множество для хранения уникальных чисел
ans = set()
# Определяем цифры, доступные для составления числа
alf = ’123456789’

# Перебор цифр первой позиции числа
for x1 in alf:
    # Перебор цифр второй позиции числа
    for x2 in alf:
        # Перебор цифр третьей позиции числа
        for x3 in alf:
            # Перебор цифр четвертой позиции числа
            for x4 in alf:
                # Формируем число как строку из выбранных цифр
                w = x1 + x2 + x3 + x4
                # Проверяем, что первая цифра равна ’1’ или ’2’
                if x1 in ’12’:
                    # Добавляем число в множество уникальных значений
                    ans.add(w)
# Выводим количество уникальных чисел
print(len(ans))

Решение кодом через itertools:

Для более компактного решения используем функцию product из модуля itertools, которая генерирует все возможные комбинации с повторениями. Сначала импортируем функцию, создаём пустое множество ans и определяем строку alf = ’123456789’ для доступных цифр. С помощью product(alf, repeat=4) формируем все четырёхзначные последовательности. Для каждой последовательности проверяем, что первая цифра (x[0]) равна ’1’ или ’2’, и если условие выполняется, добавляем комбинацию в множество ans. В конце выводим len(ans), что соответствует количеству допустимых чисел.

from itertools import product

# Создаем множество для хранения уникальных чисел
ans = set()
# Цифры, доступные для составления числа
alf = ’123456789’

# Перебираем все четырёхзначные комбинации с повторениями
for x in product(alf, repeat=4):
    # Проверяем, что первая цифра равна ’1’ или ’2’
    if x[0] in ’12’:
        # Добавляем число в множество уникальных значений
        ans.add(x)

# Выводим количество уникальных чисел
print(len(ans))

Ответ: 1458

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

Задача 34#7293Максимум баллов за задание: 1

Друг составляет пятизначные числа, используя цифры от 2  до 8  включительно. Цифры в числе могут использоваться только один раз или не использоваться совсем. Рядом с чётными числами не должно стоять чётных, а рядом с нечётными не должно стоять нечётных. Сколько различных чисел друг может составить?

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

Пусть первая цифра числа чётная, тогда она может быть одной из 4  цифр. Вторая нечётная, она может быть одной из 3  цифр. Третья чётная, она может быть одной из 3  оставшихся чётных чисел. Четвёртая нечётная, она может быть одной из 2  оставшихся нечётных цифр. Пятая чётная, может быть одной из 2  оставшихся чётных. Значит в таком случае друг может составить 4 ⋅ 3 ⋅ 3 ⋅ 2 ⋅ 2 = 144  различных числа. Если первая цифра нечётная, то по той же логике мы можем составить 3 ⋅ 4 ⋅ 2 ⋅ 3 ⋅ 1 = 72  различных чисел. Всего друг может составить 144 + 72 =  216  чисел.
Решение кодом через циклы:

Решение через циклы строится на полном переборе всех возможных пятизначных комбинаций цифр от 2 до 8. Сначала создаём пустое множество ans для хранения уникальных чисел и определяем строку alf = ’2345678’ с доступными цифрами. Для формирования числа используем пять вложенных циклов, где переменные x1, x2, x3, x4, x5 перебирают все цифры из alf и формируют строку w = x1 + x2 + x3 + x4 + x5. После формирования числа проверяем, что все цифры уникальны с помощью len(w) == len(set(w)). Для проверки условия чередования чётных и нечётных цифр создаём временную строку w1, в которой заменяем все чётные цифры (4,6,8) на ’2’, а нечётные (5,7) на ’3’. Если в этой строке нет двух одинаковых символов подряд (’22’ и ’33’), число удовлетворяет условию, и мы добавляем его в множество ans. В конце выводим len(ans), что и есть количество допустимых чисел.

# Создаем множество для хранения уникальных чисел
ans = set()
# Определяем доступные цифры
alf = ’2345678’

# Перебор цифр первой позиции числа
for x1 in alf:
    # Перебор цифр второй позиции числа
    for x2 in alf:
        # Перебор цифр третьей позиции числа
        for x3 in alf:
            # Перебор цифр четвертой позиции числа
            for x4 in alf:
                # Перебор цифр пятой позиции числа
                for x5 in alf:
                    # Формируем число как строку из выбранных цифр
                    w = x1 + x2 + x3 + x4 + x5
                    # Проверяем, что все цифры числа уникальны
                    if len(w) == len(set(w)):
                        # Заменяем чётные на ’2’, нечётные на ’3’ для проверки чередования
                        w1 = w.replace(’4’, ’2’).replace(’6’, ’2’).replace(’8’, ’2’)
                        w1 = w1.replace(’5’, ’3’).replace(’7’, ’3’)
                        # Проверяем, что одинаковые типы цифр не стоят рядом
                        if (’22’ not in w1) and (’33’ not in w1):
                            # Добавляем число в множество уникальных значений
                            ans.add(w)
# Выводим количество допустимых чисел
print(len(ans))

Решение кодом через itertools:

Для более компактного решения используем модуль itertools. Функция permutations позволяет сгенерировать все 5-значные перестановки цифр без повторений. Сначала импортируем функцию, создаём пустое множество ans и определяем строку alf = ’2345678’ с доступными цифрами. Для каждой перестановки формируем строку w, затем создаём строку w1, заменяя чётные цифры на ’2’ и нечётные на ’3’. Если в w1 нет двух одинаковых символов подряд, число удовлетворяет условию чередования и добавляется в множество ans. В конце выводим len(ans), что и является ответом.

from itertools import permutations

# Создаем множество для хранения уникальных чисел
ans = set()
# Цифры, доступные для составления числа
alf = ’2345678’

# Перебираем все 5-значные перестановки без повторений
for x in permutations(alf, 5):
    # Преобразуем перестановку в строку
    w = ’’.join(x)
    # Заменяем чётные на ’2’, нечётные на ’3’ для проверки чередования
    w1 = w.replace(’4’, ’2’).replace(’6’, ’2’).replace(’8’, ’2’)
    w1 = w1.replace(’5’, ’3’).replace(’7’, ’3’)
    # Проверяем, что одинаковые типы цифр не стоят рядом
    if (’22’ not in w1) and (’33’ not in w1):
        # Добавляем число в множество уникальных значений
        ans.add(w)

# Выводим количество допустимых чисел
print(len(ans))

Ответ: 216

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

Задача 35#7294Максимум баллов за задание: 1

Друг составляет четырёхзначные числа, используя цифры от 1 до 9 включительно. Цифры в числе могут повторяться. Число начинается с чётной цифры, а заканчивается на нечётную цифру. Сколько различных чисел друг может составить?

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

Первой цифрой числа может быть одна из 4 чётных цифр, а последней цифрой числа может быть одна из 5 нечётных цифр. На каждое оставшееся место в числе можно поставить любую из 9 цифр. Значит друг может составить 4 ⋅ 9 ⋅ 9 ⋅ 5 = 1620  различных чисел.
Решение кодом через циклы:

Решение через циклы основано на полном переборе всех четырёхзначных чисел. Сначала создаём пустое множество ans для хранения уникальных чисел и определяем строку alf = ’123456789’ с доступными цифрами. Для формирования числа используем четыре вложенных цикла, где переменные x1, x2, x3, x4 перебирают все цифры из alf и формируют строку w = x1 + x2 + x3 + x4. После формирования числа проверяем два условия: первая цифра (x1) должна быть чётной (2,4,6,8), а последняя цифра (x4) должна быть нечётной (1,3,5,7,9). Если оба условия выполняются, число добавляется в множество ans. В конце выводим len(ans), что и является количеством допустимых чисел.

# Создаем множество для хранения уникальных чисел
ans = set()
# Определяем доступные цифры
alf = ’123456789’

# Перебор цифр первой позиции числа
for x1 in alf:
    # Перебор цифр второй позиции числа
    for x2 in alf:
        # Перебор цифр третьей позиции числа
        for x3 in alf:
            # Перебор цифр четвертой позиции числа
            for x4 in alf:
                # Формируем число как строку из выбранных цифр
                w = x1 + x2 + x3 + x4
                # Проверяем, что первая цифра чётная, а последняя нечётная
                if x1 in ’2468’ and x4 in ’13579’:
                    # Добавляем число в множество уникальных значений
                    ans.add(w)
# Выводим количество допустимых чисел
print(len(ans))

Решение кодом через itertools:

Для более компактного решения используем функцию product из модуля itertools, которая генерирует все возможные четырёхзначные комбинации с повторениями. Сначала импортируем функцию, создаём пустое множество ans и определяем строку alf = ’123456789’ с доступными цифрами. С помощью product(alf, repeat=4) формируем все комбинации. Для каждой комбинации проверяем, что первая цифра (x[0]) чётная, а последняя (x[-1]) нечётная. Если условие выполняется, добавляем комбинацию в множество ans. В конце выводим len(ans), что и есть количество допустимых чисел.

from itertools import product

# Создаем множество для хранения уникальных чисел
ans = set()
# Цифры, доступные для составления числа
alf = ’123456789’

# Перебор всех четырёхзначных комбинаций с повторениями
for x in product(alf, repeat=4):
    # Проверяем, что первая цифра чётная, а последняя нечётная
    if x[0] in ’2468’ and x[-1] in ’13579’:
        # Добавляем число в множество уникальных значений
        ans.add(x)

# Выводим количество уникальных чисел
print(len(ans))

Ответ: 1620

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

Задача 36#7295Максимум баллов за задание: 1

Друг составляет восьмизначные числа, используя цифры от 1  до 9  . Цифры в числе могут использоваться ровно 1  раз или не использоваться совсем. Сначала в числе идут все четные цифры, а затем нечётные цифры. Сколько различных чисел друг может составить?

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

Первой идёт одна из 4  чётных цифр, второй одна из 3  оставшихся, т.к. одна уже использована, третьей одна из 2  оставшихся и четвёртой последняя оставшаяся цифра. Пятой идёт одна из 5  нечётных цифр, шестой — одна из 4  оставшихся, седьмой — одна из 3  оставшихся и восьмой — одна из 2  оставшихся. Значит друг может составить 4 ⋅ 3 ⋅ 2 ⋅ 1 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 = 2880  различных чисел.
Решение кодом через циклы:

Решение через циклы строится на полном переборе всех возможных восьмизначных чисел с условием уникальности цифр. Сначала создаём пустое множество ans для хранения уникальных чисел, определяем строки chet = ’2468’ для чётных и nechet = ’13579’ для нечётных цифр. Далее используем восемь вложенных циклов для перебора каждой позиции числа: первые четыре цикла формируют чётные цифры (x1, x2, x3, x4), следующие четыре — нечётные (x5, x6, x7, x8). Формируем число как строку w = x1+x2+x3+x4+x5+x6+x7+x8. Затем проверяем условие уникальности: len(w) == len(set(w)). Если все цифры уникальны, число добавляется в множество ans. В конце выводим len(ans), что является количеством допустимых чисел.

# Создаем множество для хранения уникальных чисел
ans = set()
# Определяем чётные цифры
chet = ’2468’
# Определяем нечётные цифры
nechet = ’13579’

# Перебор всех чётных цифр для первых четырёх позиций
for x1 in chet:
    for x2 in chet:
        for x3 in chet:
            for x4 in chet:
                # Перебор всех нечётных цифр для последних четырёх позиций
                for x5 in nechet:
                    for x6 in nechet:
                        for x7 in nechet:
                            for x8 in nechet:
                                # Формируем восьмизначное число
                                w = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
                                # Проверяем уникальность всех цифр
                                if len(w) == len(set(w)):
                                    # Добавляем число в множество
                                    ans.add(w)
# Выводим количество уникальных чисел
print(len(ans))

Решение кодом через itertools:

Для более компактного решения используем функцию permutations из модуля itertools, которая генерирует все возможные перестановки без повторений. Сначала импортируем функцию, создаём пустое множество ans и определяем строки chet = ’2468’ и nechet = ’13579’. С помощью permutations(chet, 4) формируем все перестановки чётных цифр, аналогично permutations(nechet, 4) для нечётных цифр. Для каждой комбинации объединяем перестановки через ”.join() в строку w и добавляем её в множество ans. В конце выводим len(ans), что является количеством допустимых чисел.

from itertools import permutations

# Создаем множество для хранения уникальных чисел
ans = set()
# Чётные цифры
chet = ’2468’
# Нечётные цифры
nechet = ’13579’

# Перебор всех перестановок чётных цифр
for x1 in permutations(chet, 4):
    # Перебор всех перестановок нечётных цифр
    for x2 in permutations(nechet, 4):
        # Формируем число из двух частей
        w = ’’.join(x1) + ’’.join(x2)
        # Добавляем число в множество уникальных значений
        ans.add(w)

# Выводим количество уникальных чисел
print(len(ans))

Ответ: 2880

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

Задача 37#7296Максимум баллов за задание: 1

Друг составляет пары чисел, используя цифры от 1  до 7  . Первое число состоит из 3  цифр, а второе — из 5  . Цифры в каждом из чисел могут повторяться, причём второе число состоит только из нечётных цифр. Сколько различных пар чисел друг может составить?

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

В первом числе друг может поставить на каждую из 3 позиций любую из 7 цифр. Значит первое число можно составить 7 ⋅ 7 ⋅ 7 = 343  различными способами. Во втором числе на каждой из 5 позиций может стоять одна из 4 нечётных цифр. Значит второе число можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 ⋅ 4 = 1024  различными способами.

Представим, что первые числа — чашки, а вторые числа — блюдца. Сколько различных вариаций чашка+блюдце можно составить?

Можно составить 343 ⋅ 1024 = 351232  различных пар чисел (блюдец с чашкой).
Решение кодом через циклы:

Для решения задачи через циклы создаём пустое множество ans, куда будем добавлять уникальные пары чисел. Задаём строки alf1 = ’1234567’ для цифр первого числа и alf2 = ’1357’ для цифр второго числа (только нечётные). Далее организуем три вложенных цикла для перебора каждой цифры первого числа (x1, x2, x3) и пять вложенных циклов для цифр второго числа (y1, y2, y3, y4, y5). Для каждой комбинации формируем строки w1 = x1+x2+x3 и w2 = y1+y2+y3+y4+y5. Пару (w1, w2) добавляем в множество ans. После полного перебора выводим количество уникальных пар с помощью len(ans).

# Создаем множество для хранения уникальных пар
ans = set()
# Цифры для первого числа
alf1 = ’1234567’
# Нечётные цифры для второго числа
alf2 = ’1357’

# Перебор всех возможных цифр первого числа
for x1 in alf1:
    for x2 in alf1:
        for x3 in alf1:
            # Формируем первое число
            w1 = x1 + x2 + x3
            # Перебор всех возможных цифр второго числа
            for y1 in alf2:
                for y2 in alf2:
                    for y3 in alf2:
                        for y4 in alf2:
                            for y5 in alf2:
                                # Формируем второе число
                                w2 = y1 + y2 + y3 + y4 + y5
                                # Добавляем пару в множество уникальных
                                ans.add((w1, w2))
# Выводим количество уникальных пар
print(len(ans))

Решение кодом через itertools:

Используем функцию product из модуля itertools, чтобы сгенерировать все возможные комбинации цифр с повторениями. Сначала импортируем функцию и создаём пустое множество ans. Определяем строки alf1 = ’1234567’ и alf2 = ’1357’. С помощью product(alf1, repeat=3) формируем все комбинации цифр первого числа, а product(alf2, repeat=5) — для второго числа. Каждую комбинацию объединяем в строки и добавляем пару в множество ans. В конце выводим количество уникальных пар с помощью len(ans).

from itertools import product

# Создаем множество для хранения уникальных пар
ans = set()
# Цифры для первого числа
alf1 = ’1234567’
# Нечётные цифры для второго числа
alf2 = ’1357’

# Перебор всех комбинаций первого числа
for x in product(alf1, repeat=3):
    # Перебор всех комбинаций второго числа
    for y in product(alf2, repeat=5):
        # Добавляем пару в множество
        ans.add((x, y))

# Выводим количество уникальных пар
print(len(ans))

Ответ: 351232

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

Задача 38#7297Максимум баллов за задание: 1

Друг составляет пары чисел, используя цифры от 1 до 6. Первое число состоит из 2 цифр, а второе — из 5. Цифры в каждом из чисел могут использоваться только 1 раз или не использоваться совсем. Сколько различных пар чисел друг может составить?

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

В первом числе друг может на первую позицию поставить одну из 6 цифр, а на вторую — одну из 5 оставшихся. Значит первое число можно составить 6 ⋅ 5 = 30  различными способами. Во втором числе на первой позиции может стоять любая из 6 цифр, на второй — любая из 5 оставшихся, на третьей — любая из 4 оставшихся, на четвёртой — любая из 3 оставшихся и на пятой — любая из 2 оставшихся цифр. Значит второе число можно составить 6 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 = 720  различными способами.

Представим, что первые числа — чашки, а вторые числа — блюдца. Сколько различных вариаций кружка+чашка можно составить?

Можно составить 30 ⋅ 720 = 21600  различных пар чисел (блюдец с чашкой).
Решение кодом через циклы:

Решение через циклы строится на полном переборе всех возможных комбинаций для каждого числа с учётом уникальности цифр. Сначала создаём пустое множество ans для хранения всех уникальных пар чисел. Определяем строки alf1 = ’123456’ и alf2 = ’123456’ для возможных цифр первого и второго числа. Используем два вложенных цикла для перебора цифр первого числа (x1, x2) и формируем число w1 = x1+x2. Проверяем уникальность цифр с помощью len(w1) == len(set(w1)). Если цифры уникальны, продолжаем перебор второго числа с пятью вложенными циклами (y1, y2, y3, y4, y5), формируем w2 = y1+y2+y3+y4+y5 и проверяем уникальность. Если оба числа соответствуют условиям, добавляем пару (w1, w2) в множество ans. В конце выводим len(ans), что является количеством допустимых пар чисел.

# Создаем множество для хранения уникальных пар чисел
ans = set()
# Цифры для первого числа
alf1 = ’123456’
# Цифры для второго числа
alf2 = ’123456’

# Перебор цифр первого числа
for x1 in alf1:
    for x2 in alf1:
        # Формируем первое число
        w1 = x1 + x2
        # Проверяем, что цифры первого числа уникальны
        if len(w1) == len(set(w1)):
            # Перебор цифр второго числа
            for y1 in alf2:
                for y2 in alf2:
                    for y3 in alf2:
                        for y4 in alf2:
                            for y5 in alf2:
                                # Формируем второе число
                                w2 = y1 + y2 + y3 + y4 + y5
                                # Проверяем уникальность цифр второго числа
                                if len(w2) == len(set(w2)):
                                    # Добавляем пару в множество
                                    ans.add((w1, w2))
# Выводим количество уникальных пар чисел
print(len(ans))

Решение кодом через itertools:

Для решения с помощью модуля itertools используем функцию permutations, которая генерирует все перестановки без повторений. Создаём пустое множество ans для хранения уникальных пар, определяем строки alf1 = ’123456’ и alf2 = ’123456’. С помощью permutations(alf1, 2) получаем все перестановки двух цифр для первого числа, аналогично permutations(alf2, 5) для второго числа. Для каждой комбинации объединяем цифры через ”.join() в строки и добавляем пару (x, y) в множество ans. В конце выводим len(ans), что даёт количество допустимых пар чисел.

from itertools import permutations

# Создаем множество для хранения уникальных пар чисел
ans = set()
# Цифры для первого числа
alf1 = ’123456’
# Цифры для второго числа
alf2 = ’123456’

# Перебор всех перестановок для первого числа
for x in permutations(alf1, 2):
    # Перебор всех перестановок для второго числа
    for y in permutations(alf2, 5):
        # Добавляем пару чисел в множество
        ans.add((x, y))

# Выводим количество уникальных пар чисел
print(len(ans))

Ответ: 21600

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

Задача 39#7500Максимум баллов за задание: 1

Алиса составляет 7-буквенные слова из букв Н, А, П, И, Т, О, К. Каждая из букв может встречаться в слове ровно один раз, причём последней буквой должна быть К, а первой буква П. Сколько различных слов может составить Алиса?

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

На первое место Алиса ставит букву П, а на последнее место букву К, обе единственным способом. На второе, третье, четвёртое, пятое и шестое место она ставит одну из 5, 4, 3, 2 и 1 из оставшихся букв соответственно, т.к. с постановкой одной из букв, общее количество букв, которые ещё можно поставить уменьшается на 1. Всего Алиса может составить 1 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 ⋅ 1 ⋅ 1 = 120  различных слов.
Решение кодом через циклы:

Для решения через циклы мы полностью перебираем все 7-буквенные комбинации букв из строки alf = ’НАПИТОК’. Создаём пустое множество ans для хранения уникальных слов. Семь вложенных циклов перебирают все позиции слова (x1, x2, x3, x4, x5, x6, x7). На каждой итерации формируем слово w = x1+x2+x3+x4+x5+x6+x7. Далее проверяем три условия:

1. Все буквы уникальны: len(w) == len(set(w)). 2. Первая буква — П: x1 == ’П’. 3. Последняя буква — К: x7 == ’К’.

Если слово удовлетворяет всем условиям, добавляем его в множество ans. После перебора выводим количество элементов множества, которое соответствует числу допустимых слов.

# Создаем множество для хранения уникальных слов
ans = set()
# Набор доступных букв
alf = ’НАПИТОК’

# Перебор всех 7-буквенных комбинаций
for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    for x6 in alf:
                        for x7 in alf:
                            # Формируем слово из текущей комбинации букв
                            w = x1 + x2 + x3 + x4 + x5 + x6 + x7
                            # Проверяем условия:
                            # 1. Все буквы уникальны
                            # 2. Первая буква П
                            # 3. Последняя буква К
                            if len(w) == len(set(w)) and x1 == ’П’ and x7 == ’К’:
                                ans.add(w)
# Выводим количество уникальных слов
print(len(ans))

Решение кодом через itertools:

Используем модуль itertools и функцию permutations, чтобы получить все перестановки длины 7 без повторений. Создаём пустое множество ans. Для каждой перестановки проверяем, что первая буква — П (x[0] == ’П’), а последняя — К (x[-1] == ’К’). Если условия выполнены, добавляем перестановку в множество ans. В конце выводим длину множества.

from itertools import permutations

# Создаем множество для хранения уникальных слов
ans = set()
# Набор доступных букв
alf = ’НАПИТОК’

# Перебираем все перестановки длины 7
for x in permutations(alf, 7):
    # Проверяем условия на первую и последнюю букву
    if x[0] == ’П’ and x[-1] == ’К’:
        ans.add(x)

# Выводим количество уникальных слов
print(len(ans))

Ответ: 120

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

Задача 40#7501Максимум баллов за задание: 1

Катя составляет 5-буквенные слова из букв М, О, Д, У, Л, Ь. Каждая из букв может встречаться в слове сколько угодно раз или не встречаться совсем, причём слово не может начинаться с Ь. Сколько различных слов может составить Катя?

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

На первое место Катя ставит любую букву, кроме Ь, т.е. одну из 5 букв. На все последующие 4 места Катя ставит любую из 6 букв. Всего Катя может составить 5 ⋅ 6 ⋅ 6 ⋅ 6 ⋅ 6 = 6480  различных слов.
Решение кодом через циклы:

Для решения задачи с помощью циклов создаём пустое множество ans, куда будем добавлять все допустимые слова. Строка alf = ’МОДУЛЬ’ содержит все доступные буквы. Используем 5 вложенных циклов, по одному на каждую позицию слова (x1, x2, x3, x4, x5). На каждой итерации формируем текущее слово: w = x1+x2+x3+x4+x5. Проверяем условие:

Первая буква не равна Ь: x1 != ’Ь’.

Если слово удовлетворяет условию, добавляем его в множество ans. После завершения перебора выводим количество элементов множества, что соответствует числу допустимых слов.

# Создаем множество для хранения уникальных слов
ans = set()
# Набор доступных букв
alf = ’МОДУЛЬ’

# Перебор всех 5-буквенных комбинаций
for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    # Формируем слово из текущей комбинации букв
                    w = x1 + x2 + x3 + x4 + x5
                    # Проверяем условие: первая буква не Ь
                    if x1 != ’Ь’:
                        ans.add(w)
# Выводим количество уникальных слов
print(len(ans))

Решение кодом через itertools:

Используем модуль itertools и функцию product для генерации всех возможных комбинаций длины 5 с повторениями. Создаём пустое множество ans. Для каждой комбинации проверяем, что первая буква не равна Ь (x[0] != ’Ь’). Если условие выполнено, добавляем комбинацию в множество ans. После перебора выводим длину множества.

from itertools import product

# Создаем множество для хранения уникальных слов
ans = set()
# Набор доступных букв
alf = ’МОДУЛЬ’

# Перебираем все возможные комбинации длины 5 с повторениями
for x in product(alf, repeat=5):
    # Проверяем условие: первая буква не Ь
    if x[0] != ’Ь’:
        ans.add(x)

# Выводим количество уникальных слов
print(len(ans))

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