我不确定这个问题是针对数学部分还是针对此部分,但我需要一个程序化解决方案(在.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} .....
我认为你现在应该可以看到这种模式
任何指针或提示如何以编程方式解决此问题,或者是否存在任何人都能想到的相关数学公式?
谢谢,
答案 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;
}
}
}