Определить количество комбинаций, подходящих под условия

Рейтинг: 0Ответов: 1Опубликовано: 14.03.2023

Определите количество шестизначных чисел, записанных в восьмеричной системе счисления, в записи которых есть ровно две цифры 6, при этом никакая нечётная цифра не стоит рядом с цифрой 6.

Как проще и легче реализовать проверку на соответствия условиям? (без прямого перебора условий комбинациями)

Ответы

▲ 1Принят
X - чётная цифра, но не 6 (0, 2, 4) - три штуки
Y - любая цифра, но не 6 (0, 1, 2, 3, 4, 5, 7) - семь штук
x - чётная цифра, но не 6 и не 0 (2, 4) - две штуки
y - любая цифра, но не 6 и не 0 (1, 2, 3, 4, 5, 7) - шесть штук
число     количество

66XYYY    1 * 1 * 3 * 7 * 7 * 7 = 1029
6X6XYY    1 * 3 * 1 * 3 * 7 * 7 =  441
6XX6XY    1 * 3 * 3 * 1 * 3 * 7 =  189
6XYX6X    1 * 3 * 7 * 3 * 1 * 3 =  189
6XYYX6    1 * 3 * 7 * 7 * 3 * 1 =  441
x66XYY    2 * 1 * 1 * 3 * 7 * 7 =  294
x6X6XY    2 * 1 * 3 * 1 * 3 * 7 =  126
x6XX6X    2 * 1 * 3 * 3 * 1 * 3 =   54
x6XYX6    2 * 1 * 3 * 7 * 3 * 1 =  126
yX66XY    6 * 3 * 1 * 1 * 3 * 7 =  378
yX6X6X    6 * 3 * 1 * 3 * 1 * 3 =  162
yX6XX6    6 * 3 * 1 * 3 * 3 * 1 =  162
yYX66X    6 * 7 * 3 * 1 * 1 * 3 =  378
yYX6X6    6 * 7 * 3 * 1 * 3 * 1 =  378
yYYX66    6 * 7 * 7 * 3 * 1 * 1 =  882

Всего 5229.

Проверка:

import math


six = set((6, ))
odds = set(range(1, 8, 2))
s = 0
for i in range(6):
    for j in range(i + 1, 6):
        n = [set(range(1, 8)) - six] + [set(range(8)) - six for _ in range(5)]
        n[i] = six
        n[j] = six
        if i > 0:
            n[i - 1] -= odds
        if i < 5:
            n[i + 1] -= odds
        if j > 0:
            n[j - 1] -= odds
        if j < 5:
            n[j + 1] -= odds
        p = math.prod(map(len, n))
        print(*map(len, n), sep=' * ', end=' = ')
        print(f'{p:4}')
        s += p
print(s)
$ python check.py
1 * 1 * 3 * 7 * 7 * 7 = 1029
1 * 3 * 1 * 3 * 7 * 7 =  441
1 * 3 * 3 * 1 * 3 * 7 =  189
1 * 3 * 7 * 3 * 1 * 3 =  189
1 * 3 * 7 * 7 * 3 * 1 =  441
2 * 1 * 1 * 3 * 7 * 7 =  294
2 * 1 * 3 * 1 * 3 * 7 =  126
2 * 1 * 3 * 3 * 1 * 3 =   54
2 * 1 * 3 * 7 * 3 * 1 =  126
6 * 3 * 1 * 1 * 3 * 7 =  378
6 * 3 * 1 * 3 * 1 * 3 =  162
6 * 3 * 1 * 3 * 3 * 1 =  162
6 * 7 * 3 * 1 * 1 * 3 =  378
6 * 7 * 3 * 1 * 3 * 1 =  378
6 * 7 * 7 * 3 * 1 * 1 =  882
5229