Drucken der Summen von 1 bis 10 mit nur einer Schleife

120929
ERJAN

Der folgende Code gibt die Summe von 1 bis 10 aus:

\ $ 1 \ $
\ $ 1 + 2 = \ $
\ $ 1 + 2 + 3 = \ $
\ $ 1 + 2 + 3 + 4 = \ $
\ $ ...... \ $
\ $ 1 + ... 10 = 55 \ $

public class Solution{

    public static void print_sums(){

        int sum = 0 ;
         for(int i = 1 ; i <= 10 ; i++){
             for(int j = 1 ; j <= i; j++ ){
                sum = sum + j ;
             }
             System.out.println( sum) ;
             sum = 0 ;
         }

    }

    public static void main(String[] args)
    {
        print_sums() ;


    }
}

Ich frage mich aus "Effizienz-Neugier" - ist es möglich, es in einer Schleife zu machen? Ohne 2 verschachtelte Schleifen?

dh füge beide iund jin eine Schleife ein und erhöhe sie von dort aus.

Ich denke, das ist unmöglich, weil ** die gesamte Schleife nur 10 mal ausgeführt wird - i = [1,10]

 for(int i = 1, j = 1 ; j <= i && i <= 10 ; i++, j++)
             //for(int j = 1 ; j <= i; j++ ){
                sum = sum + j ;
             //}
             System.out.println( sum) ;
             sum = 0 ;
Antworten
4
Natürlich kann auf Schleifen verzichtet werden. emory vor 5 Jahren 1
@emory: Ja, aber nur um es einmal zu berechnen, nicht um es in jedem Schritt auszudrucken 422_unprocessable_entity vor 5 Jahren 0
Es ist ein Einzeiler ... println (1 \ n3 \ n6 \ n ...) mit einer Schleife wäre einfacher, aber nicht notwendig. emory vor 5 Jahren 1
Wenn Sie es rekursiv tun, sollte es ziemlich einfach sein vor 4 Jahren 0
@emory stellt sich vor, das Problem ist "1 bis N". ANeves vor 4 Jahren 1

2 Antworten auf die Frage

14
bowmore

Ja, es ist möglich.

public static void printSums() {
    int sum = 0;
    for (int i = 1; i <= 10; i++) {
        sum += i;
        System.out.println(sum);
    }
}

Der Schlüssel ist einfach die Summe der ersten \ $ N \ $ -Ziffern zu berechnen. Es ist einfach, wenn Sie bereits die Summe der ersten \ $ N-1 \ $ -Ziffern haben: Sie fügen einfach \ $ N \ $ hinzu.

Und dies ist ein gutes Beispiel für eine primitive Form [Memoization] (https://en.wikipedia.org/wiki/Memoization) rolfl vor 5 Jahren 2
Sei vorsichtig mit deinen Loop-Limits! Und schauen Sie genau hin, bevor Sie eine Antwort annehmen! 200_success vor 5 Jahren 2
@ 200_erfolg, ja, es sollte i <= 10 sein: kleiner oder gleich ERJAN vor 5 Jahren 1
13
janos

Eine andere Lösung ohne die mutierende sumtemporäre Variable ist die Verwendung der Formel \ $ n * (n + 1) / 2 \ $:

public static void printSums() {
    for (int i = 1; i <= 10; i++) {
        System.out.println(i * (i + 1) / 2);
    }
}
Im Allgemeinen ist die Verwendung der Gaußschen Summe besser als die Berechnung der Summe. In diesem Fall vermute ich, dass die akzeptierte Antwort effizienter ist. emory vor 5 Jahren 3