.NET中数组的组合

时间:2013-08-06 07:09:00

标签: .net math combinations permutation

我不确定这个问题是针对数学部分还是针对此部分,但我需要一个程序化解决方案(在.NET中),因此我在这里提出问题。

我有一个可变长度的数组,输出如下例所示。

对于int [] arr = {1,2},它将如下:

[1,2],[1],[2]

对于int [] arr = {1,2,3},它将如下:

[1,2],[2,3],[3,1],[1],[2],[3],[1,2,3]

for int [] arr = {1,2,3,4}就像

[1,2],[2,3],[3,4],[4,1],[1],[2],[3],[4],[1,2,3] ,[2,3,4],[3,4,1],[4,1,2],[1,2,3,4]

for int [] arr = {1,2,3,4,5} .....

我认为你现在应该可以看到这种模式

任何指针或提示如何以编程方式解决此问题,或者是否存在任何人都能想到的相关数学公式?

谢谢,

1 个答案:

答案 0 :(得分:2)

我认为它作为一个程序是无用的,如果你不自己做这个练习那么它就没用了。但我给每个人他们的要求......

int[] arr = new int[] { 1, 2, 3 };

// How much elements in each permutation
for (int i = 1; i <= arr.Length; i++)
{
    // Starting point of the permutation
    for (int j = 0; j < arr.Length; j++)
    {
        Console.Write("[");

        // Single element of the permutation
        for (int k = 0; k < i; k++)
        {
            if (k != 0)
            {
                Console.Write(", ");
            }

            Console.Write("{0}", arr[(j + k) % arr.Length]);
        }

        Console.WriteLine("]");

        // Single cycle for last permutation of length arr.Length
        if (i == arr.Length)
        {
            break;
        }
    }
}