Форум » Динамическое программирование » Задание 23 Задача №6612 Не сходится ответ » Ответить

Задание 23 Задача №6612 Не сходится ответ

Бородина: Мой ответ 14, эталонный 11 Решала двумя способами: 1 способ рекурсивный (сделала вывод получаемой цепочки чисел ) [pre2] def f(n,q,a): a.append(n) if q==8: if n==28: print(a) return 1 else: return 0 return f(n+2,q+1,a[::])+ f(n-5,q+1,a[::])+ f(n**2,q+1,a[::]) print(f(3,1,[]) ) [/pre2] 2 способ (привожу пример с формированием массива листьев полного дерева на каждом этапе для оптимизации можно не учитывать листья, [pre2] a=[3] for i in range(1,8): b=[] for j in range(len(a)): x1=a[j]+2 b.append(x1) x1=a[j]-5 b.append(x1) x1=a[j]**2 b.append(x1) while len(a)>0: a.pop() for j in range(len(b)): a.append(b[j]) print(a.count(28)) [/pre2]

Ответов - 2

Ж: Вот рекурсия, которая решает верно: [pre2] f=lambda n,k: (f(n-5, k+1) if n-5>0 else 0) +f(n+2,k+1)+f(n**2,k+1) if n!=28 and k<7 else k==7 and n==28 print(f(3,0)) [pre2/]

Ж: Вы не проверяете условие, что число натуральное... Поправила ваш код: [pre2] def f(n, q, a): if n<0: return 0 a.append(n) if q == 7: if n == 28: print(a) return 1 else: return 0 return f(n + 2, q + 1, a+[n]) + f(n - 5, q + 1, a+[n]) + f(n ** 2, q + 1, a+[n]) print(f(3, 0, [])) [/pre2]



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