Форум » Рекурсивные процедуры и функции » задание 16 (№ 2283) » Ответить

задание 16 (№ 2283)

alex02: Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(n) = n*n + 4*n + 3, при n > 25 F(n) = F(n+1) + 2*F(n+4), при n ≤ 25, кратных 3 F(n) = F(n+2) + 3*F(n+5), при n ≤ 25, не кратных 3 Определите количество натуральных значений n из отрезка [1; 1000], для которых сумма цифр значения F(n) равна 24. [pre2] l = set() def f(n): if n == 0: return 0 if n > 25: return n*n + 4*n + 3 if n <= 25 and n % 3 == 0: return f(n + 1) + 2*f(n + 4) if n <= 25 and n % 3 != 0: return f(n+2) + 3*f(n+5) for n in range(1,1000): while f(n) > 0: k += f(n) % 10 f(n) //= 10 if k == 24: l.add(k) print(len(l)) [/pre2] скажите пожалуйста в чем ошибка

Ответов - 2

elpov06: а почему вы выбрали set , эта команда убирает одинаковые элементы, лучше использовать массив и if вне цикла while [pre2]l =[] def f(n): if n > 25: return n*n + 4*n + 3 if n <= 25 and n % 3 == 0: return f(n + 1) + 2*f(n + 4) if n <= 25 and n % 3 != 0: return f(n+2) + 3*f(n+5) for n in range(1,1000): g=f(n) k=0 while g> 0: k += g % 10 g //= 10 if k == 24: l.append(k) print(len(l)) [/pre2]

Ж: [pre2] k=0 def f(n): if n>25: return n*n+4*n+3 if n%3==0: return f(n+1)+2*f(n+4) if n%3!=0: return f(n+2)+3*f(n+5) for n in range(1,1001): k+=(sum(int(c) for c in str(f(n)))==24) print(k) [/pre2]



полная версия страницы