Задача к ЕГЭ по информатике на тему «подсчет количества слов/чисел» №5

Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 8 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.

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

Если число делится на 5, то оно оканчивается либо на 5, либо на 0.

Если число оканчивается на 5, то число имеет вид: ЧНЧНЧНЧ5, где Ч – четное число, Н – нечетное число. Кроме 5 существует 4 нечетных числа. Четных чисел в таком случае 5. Но! Важно учесть, что число не может начинаться с 0, поэтому для первого цифры числа будет не 5 вариантов. а 4.

Получаем, количество вариантов: 4 ∗4∗ 4∗ 3∗3 ∗2∗ 2 = 2304  .

Если число оканчивается на 0, то число имеет вид: НЧНЧНЧН0, где Ч – четное число, Н – нечетное число. Кроме 0 существует 4 четных числа. Нечетных чисел в таком случае 5.

Получаем, количество вариантов: 5 ∗4∗ 4∗ 3∗3 ∗2∗ 2 = 2880  .

Итоговое число слов: 2304+ 2880 = 5184  .

Решение прогой:

#создаем строки с вариантами цифр числа
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):

from itertools import permutations

ans = set()
alf = ’0123456789’

for w in permutations(alf, 8):
    w = ’’.join(w)
    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))

Ответ: 5184
Оцените статью
Я решу все!