从数字列表中查找组合以达到给定总和而不重复输入数字

时间:2016-05-02 10:32:48

标签: math

我正试图找到一种方法来计算一个数字列表,以显示所有组合,这些组合可以加上所需的总和,而不会在它们被使用过一次之后重复任何输入数字,只需将其视为已删除。

示例:

输入:2,5,5,10,15,10 期望的总和:20
组合:[10 + 10] [5 + 15]

所以剩下的数字只有2和5,因为它不能重复已经使用的数字,所以它不能说[5 + 5 + 10]

我在搜索这个函数时遇到的问题,即使是在Stackoverflow上也是如此,我可以找到一百万个允许重复的工作解决方案,但绝对没有一个可以阻止INPUT数字的重复(我可以找到一些不允许的)重复组合,但这并不是我需要做的事情,并且由于有许多重复的输入数字,不可避免地会有重复的组合)

我的目的是我需要将一大组数字(可能有数百个整数值在5到14之间)组合成40个包,而不重复输入数字。

以下是我想立即使用的输入示例

[5,9,5,5,6,7,8,7,5,6,8,8,7,5,7,5,7,5,5,8,8,8,9,5,8,6,5,8,8,8,5,6,9,6,9,8,7,5,9,5,6,8,5,5,5,7,7,6,8,7,8,6,9,6,6,6,8,5,6,6,6,5,8,6,6,6,8,9,10,10,10,10,14,14,13,13,8,6,7,7,12,12,12,11,11,12,12,12,5,10,5,6,6,11,6,6,9,10,6,13,6,5,8,7,8,5,6,6,8,6,5]

让该列表显示40的所有可能组合,而不是多次使用每个值。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

简单(不是非常快)的方法:

Repeat:
Find the first set with needed sum 
Remove it's elements from the list   
    Repeat:
    Check if similar set still exists // it's very likely for limited number range
    Remove it's elements from the list