2017-04-02 36 views
0

給定圖案...(1/2)^ 2 +(2/3)^ 2 +(3/4)^ 2 + ...循環對於該特定求和

輸入爲n;這成爲這些分數總和中使用的最高分母。

當用戶輸入n = ;總和就是(1/)^ 2。

當用戶輸入n = ;總和是(1/2)^ 2 +(2/)^ 2

我相信我已經解決了這個問題(我們假設用戶輸入一個大於或等於2的整數)...

int n; 
double sum = 0, counter = 2; 

n = console.nextInt(); 

while(counter <= n) { 
sum = sum + Math.pow(--counter/++counter, 2); 
counter++; 
} 

System.out.println("Sum is " + sum); 

是否有任何「明顯」的方式來簡化我對這個問題的解決方案(同時保持一個while循環)?這是我寫過的第一個循環之一。我不確定是否可以使用較少的變量來解決這個問題。

+0

'--counter/++ counter'不起作用。除非增量 – dehasi

+3

'--counter/++ counter'是反直覺的。爲什麼不簡單寫'counter /(counter + 1)'? – Eran

+0

對於n = 2;計數器/(計數器+ 1)爲(2/3)^ 2。對於n = 2;第一個總和應該是(1/2)^ 2;不(2/3)^ 2。 –

回答

0

嘗試

int n; 
double sum = 0, counter=1; 

n = console.nextInt(); 

    while((counter+1) <= n) { 
    sum = sum + Math.pow(counter/(counter+1), 2); 
    counter++; 
    } 

System.out.println("Sum is " + sum); 
+0

如果t2總是t1 + 1爲什麼它是必要的? –

+0

是真的。我會糾正的。 – Ravi

+0

我喜歡它。您可以輸入循環,直到迭代結束時才更改計數器的值。 –

-2
double sum = 0; 
for(double i = 2; i <= n; i++) { 
    sum += Math.pow((i-1)/i, 2); 
} 
+0

第一次迭代將會是'Math.pow(0/1,2)' –

+0

是的。 '0^2 = 0'。它不會影響 – dehasi

+0

它也不符合簡單或明顯甚至有效的解決方案 –

0

爲什麼不把它簡化並寫:

int n; 
double sum = 0, counter = 2; 

n = console.nextInt(); 

while(counter <= n) { 
sum = sum + Math.pow((counter - 1)/counter, 2); 
counter++; 
} 

System.out.println("Sum is " + sum); 

我不知道是誰首先計算(++計數器)或(--counter),如果(--counter)你的回答是正確的,但不要用++或 - 污染你的代碼,只有在你需要時才使用它們。

+1

「我不知道誰是先計算出來的(++計數器)還是(--counter),」Java總是從左到右計算,所以'--counter'在++ ++計數器之前被計算。 –

+0

這看起來也會起作用。 –