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

Ал­го­ритм вы­чис­ле­ния зна­че­ния функ­ции F(n), где n  — целое число, задан сле­ду­ю­щи­ми со­от­но­ше­ни­я­ми:

F левая круг­лая скоб­ка n пра­вая круг­лая скоб­ка = n, если n мень­ше 10,

F левая круг­лая скоб­ка n пра­вая круг­лая скоб­ка = F левая круг­лая скоб­ка n mod 10 пра­вая круг­лая скоб­ка плюс F левая круг­лая скоб­ка n div 10 пра­вая круг­лая скоб­ка , если n боль­ше = 10.

 

Опре­де­ли­те ко­ли­че­ство зна­че­ний n, мень­ших 263, для ко­то­рых F левая круг­лая скоб­ка n пра­вая круг­лая скоб­ка = 159.

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

Ре­ше­ние.

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

from functools import *

 

# гра­нич­ное зна­че­ние

a = list(map(int, str(2**63-1)))

 

@cache

def f(s, l, fl):

# если по­сле­до­ва­тель­ность нуж­ной длины, про­ве­ря­ем, что сумма нам под­хо­дит,

# и вы­хо­дим из ре­кур­сии.

if l == 0: return s == 159

 

# про­ве­ря­ем огра­ни­чен­ные под­по­сле­до­ва­тель­но­сти боль­шей длины

return sum(f(s+x, l-1, fl and (x == a[-l])) for x in range([10, a[-l]+1][fl]))

 

# ответ - ко­ли­че­ство огра­ни­чен­ных по­сле­до­ва­тель­но­стей не­об­хо­ди­мой длины

print(f(0, len(a), 1))

 

Ответ: 34602572.


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

Источник/автор: Семён Чайкин