Java程序,用于计算乘以给定数量矩阵的方法数

时间:2015-10-05 19:40:45

标签: java algorithm

我一直在努力弄清楚如何使我的程序工作。我追查了我的代码并没有给我正确答案!!!!我试图在不使用递归的情况下解决这个问题。

到目前为止,这是我的工作:

    int numberOfWaysToMultiply(int numberOfMatrices){

        in[] myArray = new int[numberOfMatrices];

        int i;  
        myArray[1] = 1;
        myArray[2] = 1;
        int result = 0;

        if(numberOfMatrices >= 3){  
            for( i = 3; i <= numberOfMatrices; i++){    
                result += myArray[i - 1] * myArray[i - 2];
                myArray[i] = result;
            }
        }
        return myArray[numberOfMatrices];

    }

3 个答案:

答案 0 :(得分:2)

这是我观察到的。

您有最终结果的说明。你可以使用一些完全不同的随机代码。你不知道如何从你所在的地方到达你需要的地方。

您需要做的是首先手动解决问题。实际上坐下来,试着找出如何得到f(3)的答案。对于f(4)。等等。

执行此操作后,您会发现在f(n)之前无法生成f(1), f(2), ..., f(n-1)。你会发现生成每一个都需要所有其他的。

尝试计算出模式。把它变成评论。逐步展开。所以你可以从这开始:

// f(1) = 1
// f(2) = 2
// for n = 3 to numberOfMatrices
//     find f(n)
// return f(numberOfMatrices)

然后展开find f(n)位。

// f(1) = 1
// f(2) = 2
// for n = 3 to numberOfMatrices
//     f(n) = 0
//     for i = 1 to n-1
//         f(n) += f(i) * f(n-i)
// return f(numberOfMatrices)

现在你有了算法。将每条评论转换为代码,您应该得到答案。我不会通过这样做完成你的作业,但它应该是直截了当的。您将f(n)存储为myArray[n]等等。

BTW错误警告。 Java中的数组总是从0开始。因此,您需要f(n)myArray[n-1]或者使myArray比现在大一些。

答案 1 :(得分:0)

与第一个答案相同。只需键入2分钟:)

你的实施完全错了。 只需检查您为numberOfMatrices = 4计算的内容。 首先,定义一个太小而不能容纳f(n)的数组。之后

int[] myArray = new int[numberOfMatrices];

你有一个包含4个元素的数组。从myArray [0]到myArray [3]。 稍后在for循环的最后一次迭代中,您将尝试设置myArray [4]。 我们假设您已更正此行,并声明

int[] myArray = new int[numberOfMatrices+1];

让我们循环遍历循环,看看会发生什么。

第1步

  

i = 3,结果= 0,myArray = [0,1,1,0,0](不要忘记索引为0的元素)。

     

结果+ = myArray [1] * myArray [2] =&gt;结果= 0 + 1 * 1 =&gt;结果= 1

     

myArray [3] = result =&gt; myArray [3] = 1

第2步

  

i = 4,结果= 1,myArray = [0,1,1,1,0]

     

结果+ = myArray [2] * myArray [3] =&gt; result = 1 + 1 * 1 =&gt;结果= 2

     

myArray [4] = result =&gt; myArray [4] = 2

因此,在最后一次迭代之后,您将拥有以下int数组:[0,1,1,1,2]

您需要的是:

int[] f = new int[numberOfMatrices+1];
f[1] = 1;
f[2] = 1;

for(int i = 3; i<=numberOfMatrices; i++){
  for(int k=1; k < i; k++){ // k will be max. i-1
    f[i] += f[k]*f[i-k];
  }
}

答案 2 :(得分:0)

你正在尝试计算n! (阅读:&#34; n factorial&#34;或&#34; n和#34的阶乘;)

int f = 1;
for(int i = 1; i<=numberOfMatrices; i++){
  f = f * i;
}
return f;

注意:即使int的值较小,这也会溢出Java numberOfMatrices