Задача к ЕГЭ по информатике на тему «Комбинаторика» №1

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

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

Восьмиричная система счисления содержит 8 цифр: 0,1,2,3,4,5,6,7. Четыре четных цифр и четыре нечетные цифры.

Рассмотрим два случая, когда число начинается с нечетной цифры и когда с четной:

1. Н Ч Н Ч Н Ч Н Ч, в таком случае (не забывая про то, что все цифры различны), получим 4 ⋅4⋅3⋅3 ⋅2⋅2⋅1 ⋅1 = 576  чисел.

2. Ч Н Ч Н Ч Н Ч Н, тут надо помнить, что на первом месте не может стоять 0, тогда →  3⋅4⋅3 ⋅3⋅2⋅2 ⋅1⋅1 = 432  числа.

Итого: 576+432 = 1008 чисел.

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

chet = ’0246’
nechet = ’1357’
count = set()
# составляем слово вида ЧНЧНЧНЧН, где Ч - чётная цифра, Н - нечётная цифра
for x1 in ’246’: # число не может начинаться с 0
    for x2 in nechet:
        for x3 in chet:
            for x4 in nechet:
                for x5 in chet:
                    for x6 in nechet:
                        for x7 in chet:
                            for x8 in nechet:
                                s = x1+x2+x3+x4+x5+x6+x7+x8
                                if len(set(s)) == len(s): # проверка, что все цифры различные
                                    count.add(s)
# составляем слово вида НЧНЧНЧНЧ, где Ч - чётная цифра, Н - нечётная цифра
for x1 in nechet:
    for x2 in chet:
        for x3 in nechet:
            for x4 in chet:
                for x5 in nechet:
                    for x6 in chet:
                        for x7 in nechet:
                            for x8 in chet:
                                s = x1+x2+x3+x4+x5+x6+x7+x8
                                if len(set(s)) == len(s):# проверка, что все цифры различные
                                    count.add(s)
print(len(count))

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

from itertools import permutations

count = set()

for x in permutations(’01234567’):
    s = ’’.join(x)
    # проверка, что число не начинается с 0 и при этом две чётных или нечётных цифры не стоят рядом
    if s[0] != ’0’ and all(int(s[i]) % 2 != int(s[i+1]) % 2 for i in range(len(s)-1)):
        count.add(s)
print(len(count))

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