級數:1×2 2×3×4 ... n×(n 1)× ... ×2n
比如輸入3,輸出應該是386,因為(1×2) (2×3×4) (3×4×5×6)=386。
我嘗試了各種回圈,但這甚至不接近預期的結果。
不過,我會在這里發布:
int sum = 0, n = sc.nextInt();
for (int i = 1; i <= n; i ) {
sum = sum i * (i 1);
}
uj5u.com熱心網友回復:
我不打算為您解決它,但您錯過了乘法本身需要為您創建的回圈中的每個數字(從 n 到 2n)另一個回圈。
我正在為您提供解決方案,但希望您會嘗試理解它以意識到您錯過了它。
public class MyClass {
private static long calculateSeries(int n){
long sum=0;
for (int i = 1; i <= n; i ) {
// You are missing multiplication part in your logic.
long mres=1;
for (int j=i; j <= 2*i; j ){
mres=mres*j;
}
sum = sum mres;
}
return sum;
}
public static void main(String args[]) {
System.out.println(calculateSeries(3));
}
}
uj5u.com熱心網友回復:
我會做得更好,并就如何解決問題給你建議。把它分成更小的問題:)
我不會給你最終結果代碼,我認為你不會從中學到很多東西,但我會盡力幫助你解決它 從中學習。
因此,用文字表示 - 給定數字 N,對每個 1<= i <= N 的 i 到 2i 之間的所有數字相乘的結果求和。
所以你想要做什么:
- 接收輸入 N
- 回圈 1 到 N 之間的所有數字 - 直到這里你都做了,太棒了:)
- 將 i 到 2i 之間的所有數字相乘的結果求和 - 這個邏輯在您的代碼中不正確,我建議您創建一個執行此乘法的函式,只需從步驟 #2 開始在回圈中呼叫并求和它
uj5u.com熱心網友回復:
這是O(n)使用單個回圈的解決方案。
int n = 3;
int sum = 0;
for (int i = 1, t = 2, m = 4; i <= n; t = t * (m - 1) * m / i, i, m = 2)
sum = t;
System.out.println(sum);
輸出:
386
每個步驟的詳細資訊:
i t m calculate next t value
- --------------------- --- -----------------------------------
1 1 * 2 4 Multiply 3 * 4 to t and divide by 1
2 2 * 3 * 4 6 Multiply 5 * 6 to t and divide by 2
3 3 * 4 * 5 * 6 8 Multiply 7 * 8 to t and divide by 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/512356.html
上一篇:此模式問題的邏輯問題
