c# - c#所有可能的数字组合并识别每个
问题描述
我有一个正在运行的代码,它可以找到等于 18 的所有可能的数字组合。我想在我的程序中实现它,问题是我需要识别这些数字中的每一个,因为其中一些是重复的。然后程序分别与它们一起运行。
具体来说,我有一组权重和位置,每个位置都有一个权重。
我需要找到这些位置的组合,不超过一定的权重,然后一个一个去。
问题是,如果在两个位置,重量与我确定的相同,则首先到达一个位置,然后到达另一个位置。
非常感谢!
int[] set = { 1, 2, 3, 1, 5, 6, 2}; //weights
foreach (string s in GetCombinations(set, 18, "")) //18 max weight
{
textBox1.Text += s + Environment.NewLine;
}
public static IEnumerable<string> GetCombinations(int[] set, int sum, string values)
{
for (int i = 0; i < set.Length; i++)
{
int left = sum - set[i];
string vals = set[i] + "," + values;
if (left == 0)
{
yield return vals;
}
else
{
int[] possible = set.Take(i).Where(n => n <= sum).ToArray();
if (possible.Length > 0)
{
foreach (string s in GetCombinations(possible, left, vals))
{
yield return s;
}
}
}
}