Сколько существует 11-значных девятеричных чисел, в записи которых не встречается
Приведём аналитическое решение Юрия Красильникова.
Из условия ясно, что число может выглядеть как ЧНЧНЧНЧНЧНЧ либо как НЧНЧНЧНЧНЧН (Ч - чётная цифра, Н - нечётная).
И чётных и нечётных цифр по 4 (2, 4, 6, 8 и 1, 3, 5, 7), поэтому тех и других чисел одинаковое количество.
Рассмотрим случай ЧНЧНЧНЧНЧНЧ, т. е. число содержит 6 чётных и 5 нечётных цифр.
Для 5 нечетных цифр возможно 4**5=1024 различных вариантов, из которых 4 (11111, 33333, 55555 и 77777) содержат более 4 одинаковых цифр. Итого вариантов для нечётных цифр, когда одинаковых цифр не более 4, 1024-4=1020.
Для 6 четных цифр возможно 4**6=4096 вариантов. Из них нас не устраивают 4 варианта из 6 одинаковых цифр, а также варианты, когда 5 цифр одинаковы, а 6-я отлична от них. Таких вариантов 6*4*3=72 (6 мест для уникальной цифры, 4 способа её выбрать и 3 способа выбрать цифру, повторяющуюся 5 раз). Итого устраивающих нас вариантов 4096-4-72=4020.
Комбинируя количество вариантов для нечётных цифр с количеством вариантов для чётных, получаем 1020*4020=4100400 вариантов.
Чисел вида НЧНЧНЧНЧНЧН столько же, поэтому общее количество - это 4100400*2=8200800.
Приведём решение на языке Python.
from itertools import *
c1 = '1357'
c2 = '2468'
count = 0
for i in product(c1,c2,c1,c2,c1,c2,c1,c2,c1,c2,c1):
s = ''.join(i)
if s.count('1') < 5 and s.count('2') < 5 and s.count('3') < 5 and s.count('4') < 5 and s.count('5') < 5 and s.count('6') < 5 and s.count('7') < 5 and s.count('8') < 5:
count += 1
print(count * 2)
Ответ: 8200800.
Приведём решение Михаила Глинского на языке Python.
from itertools import *
c1 = '1357'
c2 = '2468'
count = 0
for i in product(c1,c2,c1,c2,c1,c2,c1,c2,c1,c2,c1):
s = ''.join(i)
flag = 1
for i in range(10):
if s.count (str(i)) > 4:
flag = 0
break
if flag:
count += 1
print(count * 2)
Приведём решение Юрия Красильникова на языке Python.
from itertools import product
m = len([p for p in product('1357',repeat=5) if max([p.count(x) for x in p])<=4])
n = len([p for p in product('2468',repeat=6) if max([p.count(x) for x in p])<=4])
print( 2*m*n )
Приведём решение Сергея Донец на PascalABC.NET:
begin
var oddChars := '1357'; // Строка с нечётными цифрами
var evenChars := '2468'; // Строка с чётными цифрами
// m: количество комбинаций 5 нечётных с max повторений <=4
var m := oddChars.CartesianPower(5)
.Where(combo -> combo.GroupBy(c -> c).Max(g -> g.Count) <= 4)
.Count;
// n: количество комбинаций 6 чётных с max повторений <=4
var n := evenChars.CartesianPower(6)
.Where(combo -> combo.GroupBy(c -> c).Max(g -> g.Count) <= 4)
.Count;
Print(2 * m * n); // 8200800
end.

