Форум » Динамическое программирование » № 312 (задание 23) - не сходится » Ответить

№ 312 (задание 23) - не сходится

Калинина Дарья: Не сходится ответ Мое решение: [pre2] def f(a,b,k,t): if (a>(b+2)) or (k==2) or ((a%10)==5): return 0 if a == b: if 37 in t: return 1 else: return 0 if a!=b: return f(a-1,b,k+1,t+[a])+f(a-2,b,k+1,t+[a])+f(a+5,b,0,t+[a])+f(a*2,b,0,t+[a]) print(f(7,50,0,[])) [/pre2] Предложенное решение на сайте: [pre2] from functools import cache @cache def f( start, end, lastCmd = 0, hit37 = False ): if start > end+2 or start == [15, 25, 35, 45]: return 0 if start == end: return hit37 if start == 37: hit37 = True total = 0 if lastCmd == 1 else \ f( start-1, end, 1, hit37 ) + f( start-2, end, 1, hit37 ) return total + \ f( start+5, end, 3, hit37 ) + f( start*2, end, 3, hit37 ) count = f(7, 50) print( count ) [/pre2] Объективно содержит 2 ошибки в строке if start > end+2 or start == [15, 25, 35, 45]: return 0 1) Список [15, 25, 35, 45] не учитывает все варианты значения переменной start. По заданию не должно быть кратно 5, список должен быть таким: [5, 15, 25, 35, 45] 2) Переменная start не должна принимать какое-либо значение из списка выше. С чего бы ее сравнивают со списком? Тут же нужно in использовать, не? Если внести изменеия и прописать if start > end+2 or start in [5,15, 25, 35, 45]: return 0 Ответ этой программы будет 8538, что совпадает с ответом моей программы.

Ответов - 0



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