分别使用数字9,8,7,6,5和4,找到以下内容:
a)最大可能的总和
是否存在超过解决方案的最大可能总和?你怎么知道它是最大的总和?
b)可能的最小(正)差
是否有多个解决方案?你怎么知道这是最小的差异?
数字必须为3位数。例如,965 + 784或879 - 654
答案 0 :(得分:3)
嗯很有趣
如果您总是为(a_1,b_1),(a_2,b_2),(a_3,b_3)
选择a_1a_2a_3-b_1b_2b_3
,则不同之处在于:
100*(a_1-b_1)+10*(a_2-b_2)+(a_1-b_1)
因此,对于最小的差异,我想这应该是满的:-(a_2-b_2) > -(a_3-b_3) > (a_1-b_1)
:
(a_2-b_2) = 4-9 = -5 = d_2
(a_3-b_3) = 5-8 = -3 = d_3
(a_1-b_1) = 7-6 = 1 = d_1
为您提供唯一最小的745-698 = 47
,因为在所有其他变体中d_2
会更大,或d_3
会更大甚至d_1
。
它也是独特的(所以只有一个解决方案),因为它在积极的差异之后被问到,所以你无法切换数字。
所以我们得到了总和:
100*(a_1+b_1) + 10*(a_2+b_2) + (a_2+b_2)
现在:(a_1+b_1)>(a_2+b_2)>(a_3+b_3)
:
a_1+b_1 = 8+9 = 17
a_2+b_2 = 7+6 = 13
a_3+b_3 = 4+5 = 9
所以它是964+875 = 975+864 = 1839
,它不是唯一的,但仍然是最大的。
您可以更改b_i
和a_i
2^3
可能来构建此总和。
答案 1 :(得分:1)
确保尝试所有组合并记住最佳解决方案。但是当你聪明的话,你可以通过以下方式避免它:
最大总和为975 + 864 = 1839
最小正差异类似于745 - 698 = 47
答案 2 :(得分:1)
由于你要求算法,这里是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)]
所以差异有一个独特的解决方案。
我认为通过逻辑推理解决这个问题更为优雅,如其他人所示。这证明他们是对的。