Форум » Динамическое программирование » 5091 » Ответить

5091

Айарпи: Непоседливый Непоседа решил сыграть в игру. Он придумал исполнителя, преобразующего числа на доске и имеющего три команды: 1. Вычесть 1 2. Вычесть 2 3. Извлечь корень Первые две команды уменьшают число на доске на 1 и 2 соответственно, третья команда — извлекает из числа квадратный корень, если число является квадратом любого числа. Программа для такого исполнителя — это последовательность команд. Сколько различных результатов можно получить из исходного числа 113 в ходе исполнения программы, содержащей ровно 17 команд? [pre2] s1=set() def f(a,c): if c==17: s1.add(a) else: if type(a**0.5) == int: f(a**0.5,c+1) f(a-1,c+1) f(a-2,c+1) f(113,0) print (s1) print(len(s1)) [/pre2] Все время получаю 18, а в ответе 38. Что не так?

Ответов - 2

Поляков: Айарпи пишет: Все время получаю 18, а в ответе 38. Что не так? Сделайте так: [pre2] if a >= 0 and round(a**0.5)**2 == a: f(a**0.5,c+1) [/pre2]

Айарпи: Спасибо, попробую



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