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

Не сходится ответ в №7222

Niko6996: [pre2] def f(x, y): if x == y: return 1 if x > y: return 0 maxx = 0 for i in str(x): if maxx < int(i): maxx = int(i) minn = 0 for i in str(x): if minn > int(i): minn = int(i) if minn == 0: return f(x + 1, y) + f(x + maxx, y) return f(x + 1, y) + f(x + minn, y) + f(x + maxx, y) print(f(82, 95) * f(95, 103) * f(103, 124)) [/pre2] Функция f - рекурсивная. Если младшая цифра - это ноль, то функция возвращает только результат выполнения команды A (прибавить 1) и команды С (прибавить старшую цифру). Это сделано для того, чтобы рекурсия не была бесконечно зациклина (то есть, если на вход подается число 90, то прибавляется 0 и так бесконечно). Пытаюсь решить второй день, но у меня ответ 24276, никак не получается получить ответ с сайта, то есть 20709. Подскажите, пожалуйста, где ошибка в моем коде.

Ответов - 1

Ж: Вы, возможно, не отслеживаете уникальность траекторий. Вот код, который решает верно. [pre2] f= lambda n,m,t: f(n+1,m,t+' '+str(n)) + ( f(n+n%10,m,t+' '+str(n)) if n%10>1 else [] ) + (f(n+int(str(n)[0]),m,t+' '+str(n)) \ if n%10>1 else []) if n< m else (n==m)*[t] print(len(set(f(82,95, '')))*len(set(f(95,103, '')))*len(set(f(103,124,'')))) [/pre2]



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