既然你要求算法,这里提供一个Python的暴力解决方案:
In [1]: from itertools import permutations
In [2]: def gen_pairs():
...: for p in permutations('987654'):
...: yield int(''.join(p[:3])), int(''.join(p[3:]))
In [3]: '%i = %i + %i' % max((a+b, a, b) for a,b in gen_pairs())
Out[3]: '1839 = 975 + 864'
In [4]: '%i = %i - %i' % min((a-b, a, b) for a,b in gen_pairs() if a>b)
Out[4]: '47 = 745 - 698'
这只是提供了最小值和最大值。要检查唯一性:
In [4]: [(a,b) for (a,b) in gen_pairs() if a+b == 1839]
Out[4]:
[(975, 864),
(974, 865),
(965, 874),
(964, 875),
(875, 964),
(874, 965),
(865, 974),
(864, 975)]
请注意,如果不计算交换的答案,这只是4种解决方案。
In [5]: [(a,b) for (a,b) in gen_pairs() if a-b == 47]
Out[6]: [(745, 698)]
因此,差异具有唯一解。
我认为通过逻辑推理来解决这个问题更加优雅,正如其他人所展示的那样。这只是证明了他们是正确的。