[英]Java program to calculate the number of ways to multiply a given number of matrices
我被困在弄清楚如何讓我的程序工作。 我跟蹤了我的代碼,但它沒有給我正確的答案!!!! 我試圖在不使用遞歸的情況下解決這個問題。
這是我到目前為止的工作:
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];
}
這是我觀察到的。
你有一個最終結果的描述。 你可以使用一些隨機代碼來做一些完全不同的事情。 而且你不知道如何從你所在的地方到達你需要去的地方。
您需要做的是首先手動解決問題。 實際上坐下來,試着弄清楚如何得到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]
等。
順便說一句錯誤警告。 Java 中的數組總是從 0 開始。因此,您需要將f(n)
設為myArray[n-1]
或者使myArray
比現在大 1。
和第一個答案一樣。 只是多打了 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, result = 0, myArray = [0,1,1,0,0](不要忘記索引為 0 的元素)。
結果 += myArray[1]*myArray[2] => 結果 = 0 + 1*1 => 結果 = 1
myArray[3] = 結果 => myArray[3] = 1
第2步
i = 4,結果 = 1,myArray = [0,1,1,1,0]
結果 += myArray[2]*myArray[3] => 結果 = 1 + 1*1 => 結果 = 2
myArray[4] = 結果 => 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];
}
}
您正在嘗試計算 n! (讀作:“n 階乘”或“n 的階乘”)
int f = 1;
for(int i = 1; i<=numberOfMatrices; i++){
f = f * i;
}
return f;
注意:即使對於numberOfMatrices
小值,這也會溢出 Java int
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.