****************1000Help!Help!Help!求乘法原理的算法

mba9001 2007-05-11 11:27:31
现在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个排列字符串

求算法.
...全文
389 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mba9001 2007-05-14
  • 打赏
  • 举报
回复
数组个数是不定的
mba9001 2007-05-14
  • 打赏
  • 举报
回复
是不是我之前的说明不够清楚,大家误会我的意思了.
我说的是:
生成的排列:由各个数组中取一个相加组成

{ "X1Y1", "X1Y2", "3a", "4", "X1Ym1" }中的1个 + { "X2Y1", "X2Y2", "X2Ym2" }中的1个 + { "X3Y1", "sfsfsfaafb", "X3Ymn" }中的1个 + { "XnY1", "aaa"}中的1个
xray2005 2007-05-11
  • 打赏
  • 举报
回复
学习
Macosx 2007-05-11
  • 打赏
  • 举报
回复
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]);
}

生成每次组合的下标
根据些下标取字符串数组中的内容即可做乘法 相信楼主一看就明白
wzq6511 2007-05-11
  • 打赏
  • 举报
回复
n个数组就要循环n次,没有更好的办法,除非这n个数组之间有规律!!
mba9001 2007-05-11
  • 打赏
  • 举报
回复
//zhangliu_521(浪客)
什么意思?
wzt226 2007-05-11
  • 打赏
  • 举报
回复
二维字符串数是锯齿形?如果不是。用两个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] ;
}
}

mba9001 2007-05-11
  • 打赏
  • 举报
回复
n是变量,未知的任意数
zhangliu_521 2007-05-11
  • 打赏
  • 举报
回复
foreach
用内存换速度
calmzeal 2007-05-11
  • 打赏
  • 举报
回复
没看明白
N个循环不行么?
for (i,j,k,...)
arrray1[i] + array2[j] + array3[k]+ ...
不过ms是要算法
这个是最弱的 o(m1*m2*..*mn) haha
zhangliu_521 2007-05-11
  • 打赏
  • 举报
回复
人也肥了哈
mba9001 2007-05-11
  • 打赏
  • 举报
回复
我是晚辈了,csdn变肥了
dinoLgrace 2007-05-11
  • 打赏
  • 举报
回复
csdn变得怎么样了?楼主原来是前辈了啊,帮你顶!
mba9001 2007-05-11
  • 打赏
  • 举报
回复
help
RexZheng 2007-05-11
  • 打赏
  • 举报
回复
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];
}
}


实现了你所要求的功能
没什么时间代码写得难看,仅供参考

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧