假设有一组数字
1、2、3、4、5、6、7、8、9、10
我想找出这组数字中的几种组合,使其总和等于已知数字,例如18。我们可以发现5、6、7匹配(5+6+7=18) .
组合中的数字不能重复,集合中的数字可能不连续。
我已经编写了一个 C# 程序来做到这一点。程序随机取数组成一个组合,检查组合之和是否等于已知数。但是,程序找到的组合可能会重复,这会使进度无效。
我想知道是否有任何有效的算法来找出这种组合。
这是我的代码的一部分。
int Sum = 0;
int c;
List<int> Pick = new List<int>();
List<int> Target = new List<int>() {some numbers}
Target.Sort();
while (!Target.Contains(Sum))
{
if (Sum > Target[Target.Count - 1])
{
Pick.Clear();
Sum = 0;
}
while (true)
{
if (Pick.IndexOf(c = Math0.rand(0, Set.Count - 1)) == -1)
{
Pick.Add(c);
}
//Summation Pick
Sum = 0;
for (int i = 0; i < Pick.Count; i++)
Sum += Set[Pick[i]];
if (Sum >= Target[Target.Count - 1])
break;
}
}
Result.Add(Pick);