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

Назовём ряд из двух цифр под­хо­дя­щим, если вы­пол­ня­ет­ся любое из двух усло­вий:

1)  сумма цифр чётна и вто­рая цифра боль­ше пер­вой;

2)  сумма цифр нечётна и вто­рая цифра мень­ше пер­вой.

Назовём мно­го­знач­ное число под­хо­дя­щим, если любые две со­сед­ние цифры в его за­пи­си об­ра­зу­ют под­хо­дя­щий ряд.

При­ме­ры под­хо­дя­щих чисел: 26, 63, 30, 2630, 26308.

При­мер не­под­хо­дя­ще­го числа: 2638. Это число нель­зя счи­тать под­хо­дя­щим, так как со­сед­ние цифры 3 и 8 в его за­пи­си об­ра­зу­ют не­под­хо­дя­щий ряд.

Сколь­ко су­ще­ству­ет под­хо­дя­щих 12-⁠знач­ных 9-⁠рич­ных чисел?

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

Ре­ше­ние.

Рас­смот­рим какие числа могут по­лу­чать­ся при со­став­ле­нии по усло­ви­ям.

Рас­смот­рим дву­знач­ные числа.

Пер­вой циф­рой не может быть ноль, возь­мем цифру 1.

Если пер­вая цифра 1, то вто­рой циф­рой могут быть 0, 3, 5, 7. Всего 4 ва­ри­ан­та.

Если пер­вая цифра 2, то вто­рой циф­рой могут быть 1, 4, 6, 8. Всего 4 ва­ри­ан­та.

Если пер­вая цифра 3, то вто­рой циф­рой могут быть 0, 2, 5, 7. Всего 4 ва­ри­ан­та.

Если пер­вая цифра 4, то вто­рой циф­рой могут быть 1, 3, 5, 7. Всего 4 ва­ри­ан­та.

Если пер­вая цифра 5, то вто­рой циф­рой могут быть 0, 2, 4, 7. Всего 4 ва­ри­ан­та.

Если пер­вая цифра 6, то вто­рой циф­рой могут быть 1, 3, 5, 8. Всего 4 ва­ри­ан­та.

Если пер­вая цифра 7, то вто­рой циф­рой могут быть 0, 2, 4, 6. Всего 4 ва­ри­ан­та.

Если пер­вая цифра 8, то вто­рой циф­рой могут быть 1, 3, 5, 7. Всего 4 ва­ри­ан­та.

Если рас­смат­ри­вать трех­знач­ные числа, то между вто­рой и тре­тьей циф­ра­ми к при­ве­ден­ным ва­ри­ан­там до­бав­ля­ет­ся ва­ри­ант с 0: если цифра 0, то вто­рой циф­рой могут быть 2, 4, 6, 8. Всего 4 ва­ри­ан­та.

Таким об­ра­зом, в 12⁠-⁠знач­ном 9⁠-⁠рич­ном числе первую цифру можно вы­брать 8 спо­со­ба­ми (1–8), каж­дую сле­ду­ю­щую  — 4 спо­со­ба­ми.

Всего 8 · 411  =  33554432 под­хо­дя­щих 12⁠-⁠знач­ных 9⁠-⁠рич­ных чисел.

 

Ответ: 33554432.

 

При­ведём ре­ше­ние на языке Python.

def f(n):

s = str(n)

if len(s) == 12:

return 1

podr = []

for i in range(9):

if (int(s[-1]) + i)%2 == 0 and i > int(s[-1]):

podr.append(int(s+str(i)))

if (int(s[-1]) + i)%2 != 0 and i < int(s[-1]):

podr.append(int(s + str(i)))

return sum(f(i) for i in podr)

 

print(sum(f(i) for i in range(1,9)))

 

При­ведём ре­ше­ние Егора Чер­не­цо­ва на языке Python.

dp = [int(0 < d < 9) for d in range(9)]

for _ in range(11):

dp = [sum(dp[d] * (n > d if (d+n) % 2 == 0 else n < d) for d in range(9)) for n in range(9)]

print(sum(dp))

 

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

import functools

@functools.lru_cache(1000)

def kp(d,l):

if l==2: return len(dic[d])

return sum(kp(x,l-1) for x in dic[d])

dic={d:[x for x in range(9) if ((d+x)%2==0 and x > d) or ((d+x)%2==1 and x < d)] for d in range(9)}

print(sum(kp(x,12) for x in range(1,9)))

 

При­ведём ре­ше­ние Сер­гея Донец на PascalABC.NET:

[cache]

function rec(pos, prev: integer): double :=

if ((pos = 13)) then 1.0 else

(0..8)

.Where(curr -> (pos = 1)or( (prev + curr) mod 2 = 0)and(curr > prev)or( (prev + curr) mod 2 = 1)and(curr < prev)and( (pos > 1)or(curr > 0) )

).Sum(curr -> rec((pos + 1), curr));

begin

Println( (1..8).Sum(start -> rec(2, start)) ); // 33554432

end.


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