现在n个字符数组
     
array1 {"X1Y1","X1Y2","3a","4",..,"X1Ym1"} //长度 m1 >=1
array2 {"X2Y1","X2Y2",..,"X2Ym2"} //长度 m2 >=1
...
arrayn {"XnY1","sfsfsfaafb",..,"X2Ymn"} ////长度 mn >=1求每次从n个数组中的各数组各取一个值,组成的n项相加的排列字符串,相当于概率中的乘法法则

X1Y1+X2Y1...+XnY1
...
X1Ym1+X2Ym2 ...+X2Ymn
共有m1*m2*...*mn个排列字符串求算法.

解决方案 »

  1.   

    csdn变得怎么样了?楼主原来是前辈了啊,帮你顶!
      

  2.   

    没看明白
    N个循环不行么?
    for (i,j,k,...)
    arrray1[i] + array2[j] + array3[k]+ ...
    不过ms是要算法
    这个是最弱的 o(m1*m2*..*mn) haha
      

  3.   

    二维字符串数是锯齿形?如果不是。用两个for 不行吗?
    如果是。则先求得锯齿数组中最多个数的那个数组。如:
    string temp = "";
    int k=0;//数组中的最多个数
    for(int i=0;i<n;i++)
    {
     if(arrary[i].length > k ) k=arrary[i].length;
    }
    for(int j=0;j<k;j++)//j是数组的第二维
    {
     for(int h=0;h<n;h++)//h是数组的第一维
     { 
       if(arrary[h].length > j )  //进行判断,以免超出数组最大值.
       temp += arrary[h][j] ;
     }
    }
     
      

  4.   

    //zhangliu_521(浪客) 
    什么意思?
      

  5.   

    n个数组就要循环n次,没有更好的办法,除非这n个数组之间有规律!!
      

  6.   

    static void Main(string[] args)
            {
                int[] arrays ={ 3, 4, 5 };
                int[] index = new int[arrays.Length];
                int level = index.Length - 1;
                index[level] = -1;
                while (true)
                {
                    index[level]++;
                    if (index[level] >= arrays[level])
                    {
                        while (level>-1&&++index[level] >= arrays[level])
                        {
                            level--;
                        }
                        if (level == -1)
                        {
                            break;
                        }
                        for (int i = level + 1; i < index.Length; i++)
                        {
                            index[i] = 0;
                        }
                        level = index.Length - 1;
                    }
                    print(index);
                }
            }        private static void print(int[] index)
            {
                for (int i = 0; i < index.Length-1; i++)
                {
                    Console.Write("{0} + ",index[i].ToString());
                }
                Console.WriteLine(index[index.Length-1]);
            }生成每次组合的下标
    根据些下标取字符串数组中的内容即可做乘法 相信楼主一看就明白
      

  7.   

    static void Main()
    {
    string[] array1 = new string[] { "X1Y1", "X1Y2", "3a", "4", "X1Ym1" };
    string[] array2 = new string[] { "X2Y1", "X2Y2", "X2Ym2" };
    string[] array3 = new string[] { "XnY1", "sfsfsfaafb", "X2Ymn" };
    string[] result = Rank(array1, array2, array3);
    foreach (string s in result)
    {
    Console.WriteLine(s);
    }
    }static string[] Rank(params string[][] args)
    {
    if (args.Length >= 2)
    {
    string[] arr1 = args[args.Length - 1];
    string[] arr2 = args[args.Length - 2];
    List<string> arr = new List<string>();
    for (int i = 0; i < arr1.Length; i++)
    {
    for (int j = 0; j < arr2.Length; j++)
    {
    arr.Add(arr1[i] + " " + arr2[j]);
    }
    }
    List<string[]> tmp = new List<string[]>(args);
    tmp.RemoveAt(tmp.Count - 1);
    tmp.RemoveAt(tmp.Count - 1);
    tmp.Add(arr.ToArray());
    return Rank(tmp.ToArray());
    }
    else if (args.Length == 1)
    {
    return args[0];
    }
    else
    {
    return new string[0];
    }
    }
    实现了你所要求的功能
    没什么时间代码写得难看,仅供参考
      

  8.   

    是不是我之前的说明不够清楚,大家误会我的意思了.
    我说的是:
    生成的排列:由各个数组中取一个相加组成{ "X1Y1", "X1Y2", "3a", "4", "X1Ym1" }中的1个 + { "X2Y1", "X2Y2", "X2Ym2" }中的1个 + { "X3Y1", "sfsfsfaafb", "X3Ymn" }中的1个 + { "XnY1", "aaa"}中的1个