zoukankan      html  css  js  c++  java
  • C#组合算法 (2)

       public static List<string> GetCom<T>(T[] aConde,int n)
           {
            List<string > list = new List<string>();
            int m =aConde.Length;
            int[] flags = new int[m];
            for (int i = 0; i < n; i++)
            {
                flags[i] = 1;
            }

            for (int i = n; i < m; i++)
            {
                flags[i] = 0;
            }

         
           string s = "";
            for (int i = 0; i < flags.Length; i++)
            {
                if (flags[i] == 1)
                {
                 
                    s += aConde[i].ToString()+",";
                }
             
            }
            if(s.Length>0 && s.EndsWith(","))
            {
                   s=s.Substring(0,s.Length-1);
            }
            list.Add(s);
         

        
            int count = 1;

            bool has10 = false; //是否有"10"组合的标志:true-有;false-无

            int bound = 0; //第一个"10"组合的索引

            int num1 = 0;           //"10"组合左边的"1"的个数
            int j;

            while (true)
            {
                num1 = 0;

                has10 = false;


                for (int i = 0; i < m - 1; i++)
                {
                    if (flags[i] == 1 && flags[i + 1] == 0)//找到第一个"10"组合
                    {

                        bound = i;

                        flags[i] = 0;//将该"10"组合变为"01"组合

                        flags[i + 1] = 1;

                        for (j = 0; j < num1; j++)//将其左边的所有"1"全部移动到数组的最左端
                        {

                            flags[j] = 1;

                        }

                        for (j = num1; j < bound; j++)
                        {

                            flags[j] = 0;

                        }

                        has10 = true;

                        break;

                    }

                    else if (flags[i] == 1)
                    {

                        num1++;

                    }
                   


                }
                if (has10 == false)//没有"10"组合了,代表组合计算完毕

                {
                    break;
                }
                else
                {
                    count++;
                }
                s = "";
                for (int i = 0; i < flags.Length; i++)
                {
                    if (flags[i] == 1)
                    {

                        s += aConde[i].ToString() + ",";
                    }

                }
                if (s.Length > 0 && s.EndsWith(","))
                {
                    s = s.Substring(0, s.Length - 1);
                }
                list.Add(s);
            }
            return list;
        }

  • 相关阅读:
    WPF Caliburn 学习笔记(五)HelloCaliburn
    MSDN 教程短片 WPF 20(绑定3ObjectDataProvider)
    MSDN 教程短片 WPF 23(3D动画)
    比赛总结一
    HDU3686 Traffic Real Time Query System
    HDU3954 Level up
    EOJ382 Match Maker
    UESTC1565 Smart Typist
    HDU3578 Greedy Tino
    ZOJ1975 The Sierpinski Fractal
  • 原文地址:https://www.cnblogs.com/luluping/p/1498658.html
Copyright © 2011-2022 走看看