Это на самом деле очень разумный вопрос, но нужен некоторый контекст, чтобы понять почему.Предыдущие четыре решения, предоставленные McDowell, все print
решение как часть решения уравнения.Например, одно из четырех предыдущих решений:
def solve_brute_force(n):
for a in range(1, n):
for b in range(1, n):
for c in range(1, n):
for d in range(1, n):
if a**3 + b**3 == c**3 + d**3:
print(a, b, c, d)
Окончательное решение Макдауэлла на самом деле не сопоставимо с предыдущими четырьмя решениями в том смысле, что оно отделяет печать решения от решения уравнения.Так что это не здорово.Но мне становится хуже:
Если код print
, результат удаляется, и мы запускаем только фактический алгоритм (как сказал @molamk):
def solve(n):
sum_pair_dict = {}
for a in range(1,n):
for b in range(1, n):
sum = a**2 + b**2
if sum in sum_pair_dict:
sum_pair_dict[sum].append((a,b))
else:
sum_pair_dict[sum] = [(a,b)]
# just dump the results
print(sum_pair_dict)
Предполагая, что мы решаем для n = 4
, мы получаем:
{
2: [(1, 1)],
9: [(1, 2), (2, 1)],
28: [(1, 3), (3, 1)],
16: [(2, 2)],
35: [(2, 3), (3, 2)],
54: [(3, 3)]
}
Это (IMO) и промежуточный формат, который можно использовать для получения решений.Например, допустимым решением является a=1
, b=1
, c=1
, d=1
.Это не представлено в результатах (sum_pair_dict1
).Ни a=2
, b=2
, c=2
, d=2
, ни a=3
, b=3
, c=3
, d=3
.
На самом деле, результатов многопропали не только те, где a=b=c=d
.Чтобы получить эти результаты, необходимы следующие циклы :
for a_sum, pair_list in sum_pair_dict.items():
for pair1 in pair_list:
for pair2 in pair_list:
print(pair1, pair2)
Намного лучше, теперь мы видим отсутствующие результаты:
(1, 1) (1, 1) <------
(1, 2) (1, 2)
(1, 2) (2, 1) <------
(2, 1) (1, 2) <------
(2, 1) (2, 1) <------
(1, 3) (1, 3) <------
(1, 3) (3, 1)
(3, 1) (1, 3) <------
(3, 1) (3, 1) <------
(2, 2) (2, 2) <------
(2, 3) (2, 3) <------
(2, 3) (3, 2)
(3, 2) (2, 3) <------
(3, 2) (3, 2) <------
(3, 3) (3, 3) <------
Итак, @okcapp,Я думаю, что это достойно исправления, которое может быть представлено в https://careercup.wufoo.com/forms/cracking-the-book-bug-report/