生成数字的每种组合

时间:2019-04-19 08:52:42

标签: c#

我有一个包含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

1 个答案:

答案 0 :(得分:0)

当您说不能两次选择相同的元素时,您的意思是您不能拥有(1,2,3,2),因为“ 2”已经存在?如果顺序与您生成的元素有关,并且不能有替换,则称为无替换的排列此处是对理论的引用:{{3} } 关于循环的情况,这可能会有所帮助: https://www.mathsisfun.com/combinatorics/combinations-permutations.html