日期:2014-05-19  浏览次数:20854 次

****************1000Help!Help!Help!求乘法原理的算法
现在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个排列字符串

求算法.


------解决方案--------------------
csdn变得怎么样了?楼主原来是前辈了啊,帮你顶!
------解决方案--------------------
人也肥了哈
------解决方案--------------------
没看明白
N个循环不行么?
for (i,j,k,...)
arrray1[i] + array2[j] + array3[k]+ ...
不过ms是要算法
这个是最弱的 o(m1*m2*..*mn) haha
------解决方案--------------------
二维字符串数是锯齿形?如果不是。用两个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] ;
}
}


------解决方案--------------------
n个数组就要循环n次,没有更好的办法,除非这n个数组之间有规律!!
------解决方案--------------------
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]);
}

生成每次组合的下标
根据些下标取字符串数组中的内容即可做乘法 相信楼主一看就明白
------解决方案--------------------
学习