Автор | Сообщение |
|
Отправлено: 02.12.20 10:12. Заголовок: Рекурсия №2283 Задание 16
(№ 2283) Алгоритм вычисления значения функции 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. 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) elif n <= 25 and n % 3 != 0: return F(n + 2) + 3 * F(n + 5) for n in range (1,1001): b=0 cnt=0 while F(n) // 10 != 0: a = F(n) % 10 b = b + a if b == 24: cnt += 1 print(cnt) Очень давно сижу и никак не могу найти ответ на решения данных задач, где дано условие и промежуток. Сколько бы я не ждал ответ либо не появляется либо ответ 0. Что я делаю не так и как будет выглядеть программа в конечном виде?
|
|
|
Ответов - 3
[только новые]
|
|
|
| Администратор
|
Сообщение: 2180
|
|
Отправлено: 02.12.20 11:25. Заголовок: Max2003 пишет: cnt=..
Max2003 пишет: Вы сбрасываете счетчик перед обработкой каждого числа. Тут вы снова повторяете рекурсивный вызов столько раз, сколько цифр в числе. Сохраните F(n) в переменной и работайте с ней. Еще совет: попробуйте использовать динамическое программирование. Это значительно быстрее работает.
|
|
|
|
Отправлено: 02.12.20 11:28. Заголовок: def F(n): if n..
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) elif n <= 25 and n % 3 != 0: return F(n + 2) + 3 * F(n + 5) cnt=0 for n in range (1,1001): b=0 x=F(n) while x > 0: b += x % 10 x //= 10 if b == 24: cnt += 1 print(cnt)
|
|
|
|
Отправлено: 02.12.20 22:50. Заголовок: Спасибо большое..
Спасибо большое
|
|
|
|