Задания
Версия для печати и копирования в MS Word
Тип 8 № 63024
i

Сколь­ко су­ще­ству­ет 11-⁠знач­ных де­вя­те­рич­ных чисел, в за­пи­си ко­то­рых не встре­ча­ет­ся цифра 0, любые две со­сед­ние цифры имеют раз­ную чётность, и ни­ка­кая цифра не по­вто­ря­ет­ся боль­ше 4 раз?

Спрятать решение

Ре­ше­ние.

При­ведём ана­ли­ти­че­ское ре­ше­ние Юрия Кра­силь­ни­ко­ва.

Из усло­вия ясно, что число может вы­гля­деть как ЧНЧНЧНЧНЧНЧ либо как НЧНЧНЧНЧНЧН (Ч - чётная цифра, Н - нечётная).

И чётных и нечётных цифр по 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.


Аналоги к заданию № 63024: 63057 Все