使用数字 9、8、7、6、5 和 4 各一次,找到以下内容:
a) 最大可能的总和
除了提供最大可能总和的解决方案之外,还有更多的解决方案吗?你怎么知道这是可能的最大金额?
b) 尽可能小的(正)差异
有不止一种解决方案吗?你怎么知道这是最小的差异?
数字必须是 3 位数字。例如,965 + 784 或 879 - 654
使用数字 9、8、7、6、5 和 4 各一次,找到以下内容:
a) 最大可能的总和
除了提供最大可能总和的解决方案之外,还有更多的解决方案吗?你怎么知道这是可能的最大金额?
b) 尽可能小的(正)差异
有不止一种解决方案吗?你怎么知道这是最小的差异?
数字必须是 3 位数字。例如,965 + 784 或 879 - 654
嗯很有趣
(a_1,b_1),(a_2,b_2),(a_3,b_3)
如果你总是为tupels 取值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
可能建立这个总和。
确保尝试所有组合并记住最佳解决方案。但是当你聪明时,你可以通过以下方式避免它:
最大总和为 975 + 864 = 1839
最小正差相似 745 - 698 = 47
由于您要求算法,因此这是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)]
所以差异有一个独特的解决方案。
我认为通过逻辑推理来解决这个问题更优雅,正如其他人所展示的那样。这只是证明他们是对的。