首页 > 解决方案 > 生成每个数字组合

问题描述

我有一个包含 100 个元素的数组,其中我随机选择 4 个(不能选择两次相同的元素)。我多次重复这个过程,试图得到每一种可能的组合。不过,必须有一种更有效的方法。

我将如何创建一个只创建所有可能组合的循环?

double[][] picked = new double[4][];
int[] chosen = new int[4];
Random rnd = new Random();
List<int> exclude = new List<int>();
int z = 0;
while (z < 4)
{
    picked[z] = new double[rows];
    int x = rnd.Next(0, rows);
    if (exclude.Contains(x))
    {
        continue;
    }
    exclude.Add(x);

    // do stuff with the chosen elements

    z++;
}

编辑:链接到重复的问题是不同的,因为它允许选择重复的元素。

在这里找到我的答案:https ://stackoverflow.com/a/17871949/1880554

标签: c#

解决方案


当你说同一个元素不能被选中两次时,你的意思是你不能有,例如, (1 , 2, 3, 2) 因为“2”已经存在?如果您生成的元素的顺序很重要,并且不能重复,则称为Permutation without repitition这是对理论的参考https ://www.mathsisfun.com/combinatorics/combinations-permutations.html 关于您的循环情况,这可能会有所帮助: Permutation without repeat C#


推荐阅读