static List<int[]> 无限嵌套循环(int[] 数组)
{
int 长度 = 数组.Length, 逐级 = 长度, 检查 = 0;
bool 状态 = false;
int[] 嵌套 = Enumerable.Range(0, 长度).ToArray();
List<int[]> 全组合 = new List<int[]>();
while (嵌套[0] < 长度)
{
while (--逐级 > 0)//无限嵌套逐级运算
{
if (逐级 > 0 && 嵌套[逐级] >= 长度)
{
嵌套[逐级] = 0;
++嵌套[逐级 - 1];
逐级 = 长度 - 1;//检查唯一序
}
检查 = 0;//检查唯一序
while (!状态 && 检查 < 逐级) if (嵌套[检查] == 嵌套[逐级]) 状态 = true; else ++检查;
}
if (!状态 && 嵌套[长度 - 1] < 长度 && 嵌套[0] < 长度)
{
int[] 输出 = Enumerable.Repeat(0, 长度).ToArray();
while (逐级 < 长度)
{
输出[逐级] = 数组[嵌套[逐级]];
++逐级;
}
全组合.Add(输出);
}
++嵌套[长度 - 1];
状态 = false;
逐级 = 长度;
}
return 全组合;
}
int[] 数组 = { 41, 413, 51, 512, 12112, 12 };
Console.Write("结果:{" + string.Join("|", 无限嵌套循环(数组).Select(aa => new { zhi = aa, pai = long.Parse(string.Join("", aa)) }).OrderByDescending(aa => aa.pai).Select(aa => aa.zhi).ToArray()[0]) + "}全排\r\n");