首页 > 解决方案 > 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;
                        }
                    }
                }
            }

标签: c#algorithmcombinations

解决方案


推荐阅读