C#排列数字组合方法

时间:2020-01-09
本文章向大家介绍C#排列数字组合方法,主要包括C#排列数字组合方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

因一时兴趣为了计算福利彩票的排列数中奖概率,故写了以下排列数方法。有错误的地方请指正。

使用方法:

基数35个数,创建七位数组合

List<int[]> list = Arrange_Recursion(7, 0, new List<int[]>());

一共6724520种 用时 4821.1298 毫秒

        /// <summary>
        /// 使用递归创建 组合数排列
        /// </summary>
        /// <param name="combinationNum">组合数</param>
        /// <param name="StartNum">开始数 从0开始</param>
        /// <param name="finalList">最终排列 数组</param>
        /// <returns></returns>
        public List<int[]> Arrange_Recursion(int combinationNum, int StartNum, List<int[]> finalList)
        {

            StartNum++;
            if (StartNum != combinationNum)
            {

                int[] arr = CreterArray(35);
                List<int[]> list = CreterArrange(finalList, arr);
                return Arrange_Recursion(combinationNum, StartNum, list);

            }
            else {
                return finalList;
            }
        }

        /// <summary>
        /// 创建排列
        /// </summary>
        /// <param name="finalList"></param>
        /// <param name="arr"></param>
        /// <returns></returns>
        private static List<int[]> CreterArrange(List<int[]> finalList, int[] arr)
        {
            List<int[]> list = new List<int[]>();
            if (finalList.Count != 0)
            {
                foreach (int[] arr_ints in finalList)
                {
                    foreach (int s2 in arr)
                    {
                        if (arr_ints[arr_ints.Length - 1] < s2)
                        {
                            int[] nArr = { s2 };
                            list.Add(arr_ints.Concat(nArr).ToArray());
                        }
                    }
                }
            }
            else
            {
                //初始化数组 最低2个组合排列
                foreach (int s1 in arr)
                {
                    foreach (int s2 in arr)
                    {
                        if (s2 > s1)
                        {
                            int[] nArr = { s1, s2 };
                            list.Add(nArr);
                        }
                    }
                }
            }

            return list;
        }

        /// <summary>
        /// 创建多少位数组
        /// </summary>
        /// <param name="arr_length">数组长度</param>
        /// <returns></returns>
        private static int[] CreterArray(int arr_length)
        {

            int[] arr = new int[arr_length];
            for (int i = 1; i <= arr_length; i++)
            {
                arr[i - 1] = i;
            }

            return arr;
        }

原文地址:https://www.cnblogs.com/Harvard-L/p/12171332.html