2017-09-24 29 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

正确解决算术问题。可能不真实,以帮助新的编码器学习如何使用循环和数:) –