我有四个整数a, b, c, d,
和整数x ϵ [1, 40]
。
如何找到{a,b,c,d}的值,对于任何1< = x< = 40?
,下列等式之一为真x = a or
x = b or
x = a + b or
x = a + b + c + d or
x + a = c + d or
x + a + b = c + d or
...
x + a + b + c = d or ...
如果x = 17,{a = 1,b = 2,c = 5,d = 15},我可以写x + a + b = c + d
问题是按x ϵ [1, 40]
提出任何{a, b, c, d}
。
只有一种解决方案,我敢肯定,而且我认为,
{a = 1; a + b + c + d = 40}
答案 0 :(得分:3)
实际上,这与编程无关。这是纯粹的数学。 解决此类任务的算法很简单。从1开始,我们可以获得下一个最大值,这样我们就可以使用+和 - 来获得所有其他数字达到总和(1..it)。
所以第一个是1。
第二个是3,因为1 = 1,2 = 3 - 1,3 = 3,4 = 3 + 1.
第3名是9。
你看到每个下一个数字ID 3x之前的巧合。 你要找的四个数字是{1,3,9,27},你可以得到1到1 + 3 + 9 + 27 = 40之间的任何数字。
答案 1 :(得分:2)
这实际上是平衡三元位置的情况。对于a,b,c和d中的每一个,您可以将其添加到总数中,然后减去它(因为x + a + b == c + d
与x == c + d - a - b
完全相同,或者将其删除。您想要的数字因此是三位数值,或1,3,9和27。
答案 2 :(得分:0)
这被称为集合分区和有点子集和问题,它们是NP完全问题。即:这是一个难题,最好的办法是使用蛮力方法或动态编程方法。在任何一种情况下,都没有“有效”算法来在线性时间内解决这个问题。至少目前还没有人知道。
http://en.wikipedia.org/wiki/Partition_problem
http://en.wikipedia.org/wiki/Subset_sum_problem
这可能与博弈论有关,但这仍然是一个NP问题。