8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Друг составляет пятизначные числа, используя цифры от до
включительно. Цифры в числе могут
использоваться только один раз или не использоваться совсем. Рядом с чётными числами не должно
стоять чётных, а рядом с нечётными не должно стоять нечётных. Сколько различных чисел друг может
составить?
Пусть первая цифра числа чётная, тогда она может быть одной из цифр. Вторая нечётная, она
может быть одной из
цифр. Третья чётная, она может быть одной из
оставшихся чётных чисел.
Четвёртая нечётная, она может быть одной из
оставшихся нечётных цифр. Пятая чётная, может
быть одной из
оставшихся чётных. Значит в таком случае друг может составить
различных числа. Если первая цифра нечётная, то по той же логике мы можем составить
различных чисел. Всего друг может составить
чисел.
Решение кодом через циклы:
Решение через циклы строится на полном переборе всех возможных пятизначных комбинаций цифр от 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))
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!