Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Решите, пожалуйста, не получается чего-то.

inkognitovich Ученик (7), открыт 2 недели назад
Алгоритм вычисления значения функции F(n), где п - натуральное число, задан следующими соотношениями: F(n) = n*n + 5*n + 4, при п > 30 F(n) = F(n+1) + 3*F(n+4), при чётных n 30
F(n) = 2*F(n+2) + F(n+5), при нечётных n s 30
Определите количество натуральных значений п из отрезка [1; 1000], для которых сумма цифр значения F(n) равна 27.
2 ответа
Татьяна Просветленный (29221) 2 недели назад
Для решения задачи необходимо реализовать алгоритм вычисления значения функции F(n) в соответствии с заданными условиями и определить количество натуральных значений n из отрезка [1; 1000], для которых сумма цифр значения F(n) равна 27. Давайте напишем программу на Python, которая решит эту задачу.
 def sum_of_digits(num): 
return sum(int(digit) for digit in str(num))

def F(n, memo):
if n in memo:
return memo[n]

if n > 30:
result = n * n + 5 * n + 4
elif n % 2 == 0:
result = F(n + 1, memo) + 3 * F(n + 4, memo)
else:
result = 2 * F(n + 2, memo) + F(n + 5, memo)

memo[n] = result
return result

# Создаем словарь для хранения уже вычисленных значений F(n)
memo = {}

# Подсчитываем количество натуральных значений n из отрезка [1; 1000],
# для которых сумма цифр значения F(n) равна 27
count = 0
for n in range(1, 1001):
if sum_of_digits(F(n, memo)) == 27:
count += 1

print(count)
В данном коде используется функция sum_of_digits, которая вычисляет сумму цифр числа. Функция F реализует вычисление значения функции F(n) согласно заданным условиям с использованием мемоизации для оптимизации производительности. Затем в цикле от 1 до 1000 проверяется, равна ли сумма цифр значения F(n) 27, и если да, то увеличивается счётчик count. В конце программа выводит количество таких значений.

или в более коротком коде
 sum_of_digits = lambda num: sum(int(digit) for digit in str(num)) 

F = lambda n, memo={}: memo[n] if n in memo else (memo.setdefault(n, n * n + 5 * n + 4) if n > 30 else memo.setdefault(n, F(n + 1, memo) + 3 * F(n + 4, memo)) if n % 2 == 0 else memo.setdefault(n, 2 * F(n + 2, memo) + F(n + 5, memo)))

print(sum(1 for n in range(1, 1001) if sum_of_digits(F(n)) == 27) )
inkognitovichУченик (7) 2 недели назад
неправильно
inkognitovich, а ты свой код покажи
Андрей Высший разум (433031) 2 недели назад
 f = [0] * 1001
for i in range(31, 1001): f[i] = i * i + 5 * i + 4
for i in range(30, 0, -1):
f[i] = [f[i + 1] + 3 * f[i + 4], 2 * f[i + 2] + f[i + 5]][i % 2]
print(sum(sum(map(int, str(v))) == 27 for v in f))
Сначала надо вычислить значения от f(31) до f(1000) - в любом порядке, а только после этого вычислять значения от f(30) до f(1) в порядке уменьшения n.

Сумму цифр натурального числа v проще вычислить так: sum(map(int, str(v)))
Похожие вопросы