如何遍历相乘一个不定长度的二维混合数组?

如何遍历相乘一个不定长度的二维混合数组?
比如有如下的一个二维数组:
double[][] a=new double[3][]{
new double[]{2,3,5},
new double[]{6,2,7},
new double[]{9,6}
};

a[0][0]*a[1][0]*a[2][0],
a[0][0]*a[1][0]*a[2][1],

a[0][0]*a[1][1]*a[2][0],
a[0][0]*a[1][1]*a[2][1],

a[0][0]*a[1][2]*a[2][0],
a[0][0]*a[1][2]*a[2][1],

a[0][1]*a[1][0]*a[2][0],
a[0][1]*a[1][0]*a[2][1],

即,从每一行取一个数相乘。 像这个一共应该是有3*3*2=18 个数
注意: 第一维跟第二维的长度不定,比如这个第一维是3,但也可能是其他的数。
c吐血C
在回答前请试着写一下,如果for循环这样简单就能解决的话就不会提问了。
每算一个数,都要从第二维的每一个里取一个值。而且第一维的长度不定。
不知道用for循环怎样解决?
zjx20
对的,感觉还是要用递归才能解决这个问题。但是对递归一向很迷茫,不知能否帮写一个例子,十分感谢

忘记了..在main函数里面调用calc(0);启动递归。
-----------------------------------
事实上,这个问题也不是非递归不可,只是会稍微复杂点。我给你写段递归吧,类似c语言的伪代码。
a[][];
b[a.length];

void calc(int level)
{
if(l>=a.length)
{
result=1;
for(int i=0;i<a.length;i++)
result*=a[i][b[i]];
print(result);
return;
}

for(int i=0;i<a[level].length;i++)
{
b[level]=i;
calc(level+1);
}
}
-----------------------------------------------------
其实也不难。

稍稍转化一下问题:
现在你有了一个数组b[a.length],里面的值表示a数组每个第二维的下标
result=1;
for(i=0;i<a.length;i++)
result*=a[i][b[i]];
result就是你想要的其中一个结果了;问题就变成怎么得到所有情况下的b数组。

如果你会递归,问题就好办了;不会递归,可以往进位的方向思考,[2,0,1]下一个是[2,1,0]。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-17
您老师没教过for循环吗?
数组有个属性叫length知道吗?
第2个回答  2011-01-17
int n = sizeof(a[0])/sizeof(double);//第一维长度
int m = sizeof(a[2])/sizeof(double);//第二维长度
相似回答