0

我不确定这个问题是针对数学部分还是针对这个,但我需要一个编程解决方案(在 .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]

对于 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]

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

我想你现在应该可以看到模式了

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

谢谢,

4

1 回答 1

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;
        }
    }
}
于 2013-08-06T07:57:40.173 回答