顺手将C++改为C#无限嵌套循环(全排列组合)

 

        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");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值