2017-09-24 53 views
1

如果我們在下面列出10是3或5的倍數的所有自然數,我們得到了3,5,6和9這倍數的總和爲23Java的歐拉程序錯誤

找到的總和3或5低於1000

項目歐拉的所有倍數找到解決方案,我得到一個array out of bounds error

import java.awt.List; 
import java.util.Vector; 
import java.util.ArrayList; 
import java.util.stream.*; 

//print the sum of the multiples of 3 and 5 below 1000 
public class multiples_of_3_and_5 { 

public static void main(String[] args) { 

    int mult3[] = new int[200]; 
    int mult5[] = new int[200]; 


    for (int i = 1; i <= 1000; i+=3 -1) { 
     for (int x = 0; x <= mult3.length; x++) { 
      mult3[x] = i; 
     } 
    } 

    for (int i = 1; i <= 1000; i+=5 -1) { 
     for(int x = 0; x <= mult5.length; x++) { 
      mult5[x] = i; 
     } 
    } 

    int threeTotal = IntStream.of(mult3).sum(); 
    int fiveTotal = IntStream.of(mult5).sum(); 

    System.out.println(threeTotal); 
    System.out.println(fiveTotal); 


} 

} 
+0

嗯,這個例外是由於'x <= mult3.length',它應該是'x Eran

+0

不要那麼靜止。使用更多動態的東西 - 將數字放在'ArrayList'中。這樣你就不必知道你需要存儲的數字的數量。 –

+0

而且 - 您可以在第一個循環中計算總和。那麼你不需要'int threeTotal = IntStream.of(mult3).sum();'line –

回答

0

就可以解決這個沒有任何循環。只需計算相關arithmetic progressions的總和即可。

等差級數的總和爲n(一個 +一個Ñ)/ 2,其中一個是第一元件,一個Ñ是最後一個元素,n是數元素。

3 1和999之間的倍數的總和是(3+999)*333/2

5 1和999之間的倍數的總和是(5+995)*199/2

二者皆總和包括15倍數,所以您必須減去1和999之間的15的倍數之和,即(15+990)*66/2

因此所需總金額爲

(3+999)*333/2 + (5+995)*199/2 - (15+990)*66/2 
+0

正確解決算術問題。可能不真實,以幫助新的編碼器學習如何使用循環和數:) –