Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

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 at 21:42
    
@emory : yes but only to calculate it once, not to print it in each step –  JaDogg Aug 6 at 10:10
    
It is a one liner ... println(1\n3\n6\n...) using a loop would be easier but it is not necessary. –  emory Aug 6 at 12:08

2 Answers 2

up vote 7 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
1  
And this is a good example of a primitive form of memoization –  rolfl Aug 2 at 14:52
1  
Be careful with your loop limits! And look carefully before accepting an answer! –  200_success Aug 2 at 15:12
1  
@200_success, yes , it should be i <=10 : less than or equal –  ERJAN Aug 2 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  
+1 for Gaussian Sum –  Thomas Junk Aug 2 at 17:21
1  
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 at 21:44

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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