8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 8 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
Решение аналитически:
Если число делится на 5, то оно оканчивается либо на 5, либо на 0.
Если число оканчивается на 5, то число имеет вид: ЧНЧНЧНЧ5, где Ч – четное число, Н – нечетное число. Кроме 5 существует 4 нечетных числа. Четных чисел в таком случае 5. Но! Важно учесть, что число не может начинаться с 0, поэтому для первого цифры числа будет не 5 вариантов. а 4.
Получаем, количество вариантов: .
Если число оканчивается на 0, то число имеет вид: НЧНЧНЧН0, где Ч – четное число, Н – нечетное число. Кроме 0 существует 4 четных числа. Нечетных чисел в таком случае 5.
Получаем, количество вариантов: .
Итоговое число слов: .
Решение программой с помощью циклов:
Напишем программу для перебора всевозможных комбинаций из заданных цифр. Для этого организуем
вложенных циклов (по одному на каждую позицию в слове). Каждый цикл перебирает цифры заданной строки,
формируя все возможные комбинации. Запишем количество подходящих слов.
#создаем строки с вариантами цифр числа a = "0123456789" a1 = "123456789" d5 = "05" ch = "02468" nch = "13579" # Создаем контейнер pairs = set() # Ввод счетчика c = 0 for m in ch: for n in ch: pairs.add(m + n) # Все комбинации чётных чисел for m in nch: for n in nch: pairs.add(m + n) # Все комбинации нечётных чисел # Подчёт количества чисел for i in a1: for j in a: for n in a: for k in a: for m in a: for l in a: for h in a: for v in d5: s = i + j + n + k + m + l + h + v # Формируем число if all(s.count(i) <= 1 for i in s) and all(s.count(t) == 0 for t in pairs): c += 1 print(c) # Различность цифр проверяет первое условие # Наличие двух рядом стоящих чётных/нечётных цифр проверяет второе условие, тут мы сначала создаём массив для таких пар, составляем их с помощью вложенных циклов, а потом проверяем условием уже при составлении числа # Проверки делимости на 5 тут нет, т.к. в качестве последней цифры либо 5, либо 0
Решение программой с помощью модуля itertools:
Для решения задачи с помощью модуля itertools воспользуемся функцией permutations. Она генерирует все возможные слова из заданного алфавита. Запишем количество подходящих слов.
from itertools import permutations ans = set() # Множество подходящих слов alf = "0123456789" # Цифры к задаче # Получим все комбинации из 8 цифр из заданного алфавита for w in permutations(alf, 8): w = "".join(w) # join объединит цифры if w[0] != "0" and w[-1] in "05": # Проверяем по условию f = 1 # Флаг для проверки условия с комбинациями for i in range(len(w) - 1): if int(w[i]) % 2 == int(w[i + 1]) % 2: # Если в слове есть гласная + гласная или согласная + согласная f = 0 break if f: # Если условие с комбинациями соблюдено ans.add(w) # Добавим слово в множество print(len(ans)) # Выведем нужное количество
Специальные программы

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

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

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

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

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

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