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

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

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

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

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

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

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

Сколь­ко су­ще­ству­ет под­хо­дя­щих 11-⁠знач­ных 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 ва­ри­ан­та.

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

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

 

Ответ: 8388608.

 

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

def f(n):

s = str(n)

if len(s) == 11:

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.

def f(d,n):

if n==11:

return 1

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

return sum([f(x,n+1) for x in d1])

print(sum([f(x,1) for x in range(1,9)]))

 

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

var Base := 9; // 9-⁠рич­ных

var Length := 11; // 11-⁠знач­ных

[cache] // Кэ­ши­ру­ем ре­зуль­та­ты

function GetValidNext(prev: integer): sequence of integer;

begin

Result := (0..Base-1)

.Where(x -> (((prev + x) mod 2 = 0) and (x > prev)) or (((prev + x) mod 2 <> 0) and (x < prev)))

.ToArray;

end;

begin

var memo := (0..Length-1).Select(i -> (0..Base-1).Select(p -> 0).ToList).ToList;

memo[0] := (0..Base-1).Select(p -> 1).ToList;

for var rem := 1 to Length-1 do

for var p := 0 to Base-1 do

memo[rem][p] := GetValidNext(p).Sum(x -> memo[rem-1][x]);

Writeln( (1..Base-1).Sum(x -> memo[Length-1][x]) ); // 8388608

end.


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