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

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

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

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

Задача 1#6223

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

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

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

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

Решение через циклы

a = ’0123456789’ # наше слово
chet = ’02468’ # чётные цифры
# комбинации, из которых одна точно должна быть в подходящем слове
done = [x1+x2+x3 for x1 in chet for x2 in chet for x3 in chet]
# комбинации, из которых ни одна не должна быть в подходящем слове, так как нас интересуют слова, где идут подряд ровно 3 чётные цифры
lock = [x1+x2+x3+x4 for x1 in chet for x2 in chet for x3 in chet for x4 in chet]
count = 0
# переборы букв слова
for x1 in a:
    for x2 in a:
        for x3 in a:
            for x4 in a:
                for x5 in a:
                    s = x1+x2+x3+x4+x5
                    if s[0] == ’5’ and len(set(s)) == len(s): # проверка, что число начинается с 5 и каждая цифра встречается единожды
                        # проверка, что есть в слове тройка подряд идущих чётных цифр и нет при этом чётверки подряд идущих цифр
                        if any(word in s for word in done) and all(word not in s for word in lock):
                            count += 1

print(count)

Решение через itertools

from itertools import permutations
chet = ’02468’ # чётные цифры
done = [x1+x2+x3 for x1 in chet for x2 in chet for x3 in chet]
# комбинации, из которых ни одна не должна быть в подходящем слове, так как нас интересуют слова, где идут подряд ровно 3 чётные цифры
lock = [x1+x2+x3+x4 for x1 in chet for x2 in chet for x3 in chet for x4 in chet]
count = 0
for x in permutations(’0123456789’,r = 5): # перебор слов
    s = ’’.join(x)
    if s[0] == ’5’:# проверка, что число начинается с 5
        # проверка, что есть в слове тройка подряд идущих чётных цифр и нет при этом чётверки подряд идущих цифр
        if any(word in s for word in done) and all(word not in s for word in lock):
            count += 1
print(count)

Ответ: 480

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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