例如a,b,c
全分组包含以下几种
a/b/c
ab/c
a/bc
ac/b
abc
一共5种希望有一个函数可以对数组进行全分组,数组字符数为n(n>3)怎么实现?

解决方案 »

  1.   

    首先有一个不用分的 就是你上面的ABC   n1=n.leng-1;//可以插入/的地方有几个好像不对
      

  2.   

    你这个题目有问题!
    ac/b 是哪来的?
    如果考虑全排列,那至少还有 bca、bc/a、b/ca b/c/a 没考虑到
    如果不是全排列,那只有4种        static void Main(string[] args)
            {
                var a = "abc";
                var b = "/\0";
                var buf = new StringBuilder();
                for (var i = 0; i <= a.Length; i++)
                {
                    var mask = Convert.ToString(i, 2).PadLeft(a.Length - 1, '0');
                    for (var j = 0; j < a.Length; j++)
                    {
                        buf.Append(a[j]);
                        if (j < mask.Length) buf.Append(b[mask[j]-'0']);
                    }
                    Console.WriteLine(buf.ToString());
                    buf.Clear();
                }
            }
     
      

  3.   

    lz说的意思大概为  b/ca=ac/b 
    打个比方就是三个人 可以两个人一组 三个人一组或者一个人一组 求有会组成几种不同的组合。  
      

  4.   

    扩展一下        static void Main(string[] args)
            {
                var a = "abcd";
                var b = "+-*/";
                var buf = new StringBuilder();
                for (var i = 0; i < Math.Pow(b.Length,a.Length-1); i++)
                {
                    var mask = BaseCconvert(i, b.Length).PadLeft(a.Length - 1, '0');
                    //Console.WriteLine(mask);
                    for (var j = 0; j < a.Length; j++)
                    {
                        buf.Append(a[j]);
                        if (j < mask.Length) buf.Append(b[mask[j]-'0']);
                    }
                    Console.WriteLine(buf.ToString());
                    buf.Clear();
                }
            }
            static string BaseCconvert(int number, int tobase)
            {
                return BaseCconvert(number.ToString(), 10, tobase);
            }
            
            static string BaseCconvert(string number, int frombase, int tobase)
            {
                var dict = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                number = number.ToUpper();
                Int64 tmp = 0;
                foreach (var c in number.ToUpper()) tmp = tmp * frombase + dict.IndexOf(c);
                var res = new List<char>();
                while (tmp > 0)
                {
                    var mod = tmp % tobase;
                    tmp = tmp / tobase;
                    res.Insert(0, dict[(int)mod]);
                }
                return new string(res.ToArray());
            }