Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

The code below prints sum from 1 to 10:

\$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() ;


    }
}

I wonder out of "efficiency curiosity" - is it possible to do it in 1 loop? Without 2 nested loops?

i.e. put both i and j in one loop and increment them from there.

I think it is impossible, because **the whole loop will run only 10 times - 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 ;
share|improve this question
1  
Clearly it is possible to do without any loops. – emory Aug 2 '14 at 21:42
    
@emory : yes but only to calculate it once, not to print it in each step – JaDogg Aug 6 '14 at 10:10
1  
It is a one liner ... println(1\n3\n6\n...) using a loop would be easier but it is not necessary. – emory Aug 6 '14 at 12:08
    
if you do it recursively it should be fairly simple – user80793 Aug 9 '15 at 5:00
1  
@emory imagine the problem is 1 to N. – ANeves Aug 9 '15 at 13:11
up vote 13 down vote accepted

Yes, it is possible.

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

The key is simply to calculate the sum of the first \$N\$ digits. It is easy if you already have the sum of the first \$N-1\$ digits : you simply add \$N\$.

share|improve this answer
2  
And this is a good example of a primitive form of memoization – rolfl Aug 2 '14 at 14:52
2  
Be careful with your loop limits! And look carefully before accepting an answer! – 200_success Aug 2 '14 at 15:12
1  
@200_success, yes , it should be i <=10 : less than or equal – ERJAN Aug 2 '14 at 15:18

Another solution without the mutating sum temporary variable is using the \$n * (n + 1) / 2\$ formula:

public static void printSums() {
    for (int i = 1; i <= 10; i++) {
        System.out.println(i * (i + 1) / 2);
    }
}
share|improve this answer
2  
In general using the gaussian sum is better than actually calculating the sum. In this case, I suspect the accepted answer would be more efficient. – emory Aug 2 '14 at 21:44

protected by Jamal Sep 15 '15 at 7:08

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.