找到满足给定数字的任何和方程的4个数字

时间:2010-03-26 19:14:01

标签: algorithm math

我有四个整数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}

3 个答案:

答案 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 + dx == 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问题。