Потом добавляем к полученному наше исходное число (например, 29 превращается в 92 и к нему прибавляется 29). Из этой суммы находим квадрат с функции sqrt() из модуля math (мы его подключили первой строкой import math). Чтобы проверить, полный ли квадрат получается из этого числа, нужно проверить, имеет ли остаток полученный корень. Я нашел остаток от деления с конструкции root % 1. Если остаток равен нулю, то квадрат полный, следовательно выводим число в консоль с функции print().
Программа на питоне, перебирающая варианты и возвращающая все ответы минимальной длины: def number_of_adds(n): def next_seq(seq): new_elems = set() for i in range(len(seq)): for j in range(i, len(seq)): new_elem = seq[i] + seq[j] if new_elem > seq[-1] and new_elem not in new_elems: new_elems.add(new_elem) yield seq + [new_elem]
current_stage = None next_stage = [[1]] answer = [] while len(answer) == 0: current_stage = next_stage next_stage = [] for chain in current_stage: next_stage.extend(next_seq(chain)) answer = [seq[1:] for seq in next_stage if seq[-1] == n] return answer
def print_solution(n): answer = number_of_adds(n) print("Для {} есть {} решений(-я, -е):".format(n, len(answer))) for i in range(len(answer)): print("{}. {}".format(i + 1, " ".join(map(str, answer[i] print()
print_solution(27)
Запустив, находим, что необходимо 6 сложений. За 6 сложений можно получить 27X, например, так: X + X = 2X 2X + X = 3X 3X + 3X = 6X 6X + 6X = 12X 12X + 12X = 24X 24X + 3X = 27X
import math
for i in range(10, 99 + 1):
if math.sqrt(i % 10 * 10 + i // 10 + i) % 1 == 0:
print(i)
Пояснения:
Перебираем с цикла for список всех двузначных чисел, созданный с функции range(10, 99 + 1).
i % 10 * 10 + i // 10 — меняем местами десятки и единицы (например, 29 превращаем в 92):
i % 10 — получаем десяткиi // 10 — получаем единицыПотом добавляем к полученному наше исходное число (например, 29 превращается в 92 и к нему прибавляется 29). Из этой суммы находим квадрат с функции sqrt() из модуля math (мы его подключили первой строкой import math). Чтобы проверить, полный ли квадрат получается из этого числа, нужно проверить, имеет ли остаток полученный корень. Я нашел остаток от деления с конструкции root % 1. Если остаток равен нулю, то квадрат полный, следовательно выводим число в консоль с функции print().