# Printing the sums of numbers from 1 to 10 with only 1 loop

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 ;

-
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
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
@emory imagine the problem is 1 to N. – ANeves Aug 9 '15 at 13:11

## 2 Answers

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$.

-
And this is a good example of a primitive form of memoization – rolfl Aug 2 '14 at 14:52
Be careful with your loop limits! And look carefully before accepting an answer! – 200_success Aug 2 '14 at 15:12
@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);
}
}

-
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 (the association bonus does not count).

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