2016-03-20 15 views
2

Ich habe versucht, ein Stück Code, der eine Eingabe von "n" akzeptiert, berechnet die Summe der Zahlen auf der n-ten Zeile ein ungeradzahliges Dreieck, das wie folgt aussieht:CodeWars - Summe der ungeraden Zahlen - For Schleife

   1 
      3  5 
     7  9 11 
    13 15 17 19 
21 23 25 27 29 

etc. Also für n = 3, würde die Summe 7 + 9 + 11 seine dh 27

ich weiß, dass n nicht nur die Zeilennummer ist, sondern gleich auch die Anzahl der Zahlen in dieser Reihe. so n = 3 haben auch 3 ungeraden Zahlen darauf. Deshalb dachte ich, dass ich die erste Nummer der Zeile bekommen könnte, dann einfach durch die Addition von zwei zu der vorherigen Nummer, dann summiere es.

Mein Code unten funktioniert nicht, also für eine Eingabe von n=43, berechnet mein Code, dass die Summe 3570 ist, während es tatsächlich 79507 entspricht.

public static int rowSumOddNumbers(int n) { 
    int firstNum = (2 * n) - 1; 
    int total = 0; 
    for (int i = 0; i < n; i++) { 
     total += (firstNum + 2); 
    } 
    return total; 
} 

Ich glaube, mein Problem ist, dass ich nicht die vorherige Nummer zusammen mit der aktuellen Nummer bin Hinzufügen + 2. Sollte es sein, dass ich die vorherige Schleife des Ergebnis speichern muß, als es Ergebnis der an die Stromschleife hinzufügen?

Jede Hilfe wird geschätzt.

+0

Was haben Sie mit '(2 * n) - 1' für' firstNum' kommen lassen? Es ist eindeutig falsch. – bcsb1001

Antwort

8

die Summe der n-ten Zeile von ungeraden Zahlen ist einfach die Würfel von n:

public static int rowSumOddNumbers(int n) { 
    return n * n * n; 
} 

Ich überlasse die Ableitung dem Leser.


BTW, Ihre Aussage, dass der Wert für n = 4374088 sein soll, ist nicht korrekt. Es ist eigentlich 79507.

1

Dies ist, wie Sie das Problem nähern können es anderen schnellere Methoden also.First Sie die erste Zahl in dem n-ten line.You sehen finden, dass die Startnummern jeder Zeile in einer Folge sind

1 3 7 13 21 ... 

daher n-te Glied wird (n-1)^2 + (n-1)+1

Sobald Sie das finden, können Sie die Summe aller Ziffern in dieser Zeile durch Iteration von dieser Zahl auf die Anzahl der Begriffe in der Linie

for(int i=0;i<n;i+=2) 
{ 
    sum+=(Nth_Term+i); 
} 
finden

oder einfach nur die Formel der Summe von n-Bedingungen von AP gilt mit comman Verhältnis 2

sum= n*(2*Nth_Term + (n-1)*2)/2 ; 

weiter, wenn Sie den Wert des N-te Term in der obigen Formel finden Sie setzen werden, dass sie ausgewertet n^3.

sum = n*(2* ((n-1)^2 + (n-1)+1) + (n-1)*2)/2 = n^3 
0

Dies ist, was Sie suchen.

public class RowSumOddNumbers { 

    public static int array[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; 

    public static int rowSumOddNumbers(int n) { 
     int firstIndex = 0; 
     for (int i = 1; i < n; i++) { 
      firstIndex += i; 
     } 
     int total = 0; 
     for (int i = firstIndex; i < firstIndex + n; i++) { 
      total += array[i]; 
     } 
     return total; 
    } 

    public static void main(String[] args) { 
     System.out.println(RowSumOddNumbers.rowSumOddNumbers(3)); //27 
     System.out.println(RowSumOddNumbers.rowSumOddNumbers(1)); //1 
     System.out.println(RowSumOddNumbers.rowSumOddNumbers(2)); //8 
    } 
} 
Verwandte Themen