C# 需要计算所有变化的算法(组合计算)

C# 需要计算所有变化的算法(组合计算),c#,algorithm,combinations,C#,Algorithm,Combinations,我有一份清单,清单上的物品数量总是相等的 我需要一个算法来找到所有两个成员的组合 例如,如果项目计数为4,则输出为 项目: {1,2,3,4} 结果集: {12} ,{34} {13} ,{24} {14} ,{23} 顺序没有区别,{12}覆盖了{21} 对于第6项,输出为: 项目: {1,2,3,4,5,6} 结果集: 123456 123546 123645 13 24 56 132546 13 26 45 143356 14 25 36 14 26 35 15 23 46 15 24 3

我有一份清单,清单上的物品数量总是相等的

我需要一个算法来找到所有两个成员的组合

例如,如果项目计数为4,则输出为

项目:

{1,2,3,4}

结果集:

{12} ,{34}

{13} ,{24}

{14} ,{23}

顺序没有区别,{12}覆盖了{21}

对于第6项,输出为:

项目:

{1,2,3,4,5,6}

结果集:

123456

123546

123645

13 24 56

132546

13 26 45

143356

14 25 36

14 26 35

15 23 46

15 24 36

15 26 34

162345

162435

162534

你能告诉我怎么走吗

多谢各位

编辑:

这个问题读起来很短,若你们花1分钟读这个问题,你们会发现它并不像大多数人认为他们可能是半文盲那个样是重复的

{1,2,3,4,5,6}的组合是

正如你们在顶部看到的,这不是我想要的。若你们想帮忙或下车,请阅读问题


祝您度过愉快的一天。

因为您的组合中总是有两个成员,所以一个简单的嵌套for循环应该可以工作:

for (int i = 0; i < data.Length - 1; i++)
   for (int j = i + 1; j < data.Length; j++
      Console.WriteLine({0}{1}, i, j);
我们迭代列表中的每个项目,直到下一个到最后一个,因为我们不能有1个数字组合。在每一次迭代中,我们从外部迭代变量加上1个不重复的元素迭代到列表的末尾

这将生成所有唯一的组合。但是,要执行两个或三个以上的成员输出,您需要研究递归。我将把格式化输出以匹配您的问题作为练习留给读者:

对于6个元素组合,我们必须深入研究递归的疯狂世界。递归真的会弄乱你的头脑,所以如果你不明白什么,请询问。递归的一般原则是:对第一个元素执行某些操作,调用自己并传递其余的元素。在这种情况下,代码将类似于:

public List<List<int>> GetAllCombos (int[] values)
{
    //Kick it off with the 0 index
    return GetCombos(values, 0);
}

private List<List<int>> GetCombos(int[] values, int myIndex)
{
    //A holder for combinations from this index onward
    List<List<int>> combos = new List<List<int>>();

    for (int i = myIndex; i < values.Length; i++)
    {
        if (myIndex + 1 < values.Length)
        {
            foreach (List<int> combo in GetCombos(values, myIndex + 1))
            {
               combo.Add(values[myIndex][i]);
               combos.Add(combo);
            }
        }
        else
        {
           List<int> newCombination = new List<int>() { values[myIndex][i] };
           combos.Add(newCombination);
        }
    }
    return combos;
}

同样,如果你不明白什么,请一定要问。递归是一个很难理解的概念

你做过研究吗?5分钟,即使是谷歌,我也能得到:

所有这些都会告诉你怎么做

通过搜索,您可以很快找到这个问题,并提供更多资源,更不用说实际的解决方案


如果您是或的成员,只需几秒钟搜索他们的在线库,您就可以获得所需的一切。

在回答之前,看到您尝试解决这个问题,那将是非常好的。作为初学者获得这个算法可能很难,即使它很简单,也很难自己生成,所以我将尝试帮助您查看我的答案。请确保您理解代码的功能,如果我能帮助您了解其工作原理,请在评论中提问;我需要一个清单,15个项目,每个项目的长度为6喜欢;12 34 56 12 35 46我想我的问题定义错了,对此表示抱歉。@EmreAtaseven,添加了递归解决方案。如果你有问题,请告诉我!感谢您的代码,我几乎理解了它,但它在集合中创建了重复的值,我将尝试修改它。谢谢。你们读过问题了吗?5分钟甚至不足以阅读和理解它们是完全不同的东西。