2017-04-02 5 views
0

ein Muster gegeben ... (1/2)^2 + (2/3)^2 + (3/4)^2 + ...Schleife für diese bestimmte Summierung

Eingang ist N; das wird der höchste Nenner, der bei der Summierung dieser Brüche verwendet wird.

Wenn ein Benutzer n = eingibt; die Summe ist einfach (1/)^2.

Wenn ein Benutzer n = eingibt; Die Summe ist (1/2)^2 + (2/)^2

Ich glaube, ich habe dieses Problem gelöst (wir nehmen an, der Benutzer gibt eine Ganzzahl größer als oder gleich 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); 

Gibt es einen "offensichtlichen" Weg, um meine Lösung für dieses Problem zu vereinfachen (während eine While-Schleife)? Dies ist eine der ersten Loops, die ich jemals geschrieben habe. Ich bin nicht sicher, ob weniger Variablen verwendet werden können, um dieses Problem zu lösen.

+0

'--counter/++ counter' machen keinen Effekt. Division folgt nach Inkrementen – dehasi

+3

'--counter/++ counter' ist Zähler intuitiv. Warum nicht einfach 'counter/(counter + 1)' schreiben? – Eran

+0

Für n = 2; Zähler/(Zähler + 1) ergibt (2/3)^2. Für n = 2; die erste Summe sollte (1/2)^2 sein; nicht (2/3)^2. –

Antwort

0

Versuchen

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

Wenn t2 immer t1 + 1 ist, warum ist es notwendig? –

+0

wahr. Ich werde korrigieren. – Ravi

+0

Ich mag es. Sie können die Schleife eingeben, ohne den Wert des Zählers bis zum Ende der Iteration zu ändern. –

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

die erste Iteration wäre 'Math.pow (0/1, 2)' –

+0

ja. '0^2 = 0'. es betrifft nicht – dehasi

+0

es gilt auch nicht als einfache oder offensichtliche oder sogar effiziente Lösung –

0

Warum es nicht vereinfachen und schreiben Sie:

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); 

ich weiß nicht, wer zuerst berechnet wird (++ Zähler) oder (--counter), wenn (--counter) Ihre Antwort ist korrekt, aber verschmutzen Sie Ihren Code nicht mit ++ oder -, verwenden Sie sie nur, wenn Sie sie brauchen.

+1

"Ich weiß nicht, wer zuerst berechnet wird (++ Zähler) oder (--counter)," Java wertet immer von links nach rechts aus, so dass der '-Zähler' vor dem' ++ Zähler' ausgewertet wird. –

+0

Das sieht so aus, als würde es auch funktionieren. –