项目Euler所有偶数的和

时间:2017-06-23 05:54:42

标签: java

我试图找到低于4密耳的所有偶数的斐波那契数的总和。 到目前为止这是我的代码。它向我展示了一个数字但项目欧拉说这是错误的。 有人能提出一些建议吗?

public static void main(String[] args) {
    System.out.println(fibonacci());

}

public static int count(){
    int sum = 0;
    for(int i =0; i<1000;i++){
        if(i%3==0||i%5==0){
            sum+=i;
        }
    }
    return sum;
}


public static long fibonacci(){

    ArrayList<Integer> even = new ArrayList<Integer>();



    int first = 1;
    int second = 1;
    int third = 0;
    long sum = 0;

    while(!(third>=3999999)){

        third = first+second;
        first = second;
        second = third;
        if(first%2==0){
            even.add( new Integer(first));

        }
        if(second%2==0){
            even.add( new Integer(second));

        }
        if(third%2==0){
            even.add( new Integer(third));

        }


    }
    for(int i = 0; i<=even.size()-1;i++){

        sum+=even.get(i);
    }
    return sum;

}

3 个答案:

答案 0 :(得分:1)

  1. 你写了不完整的问题,原来的问题陈述是找到所有偶数的总和,也是Fibonacci系列的一部分。
  2. 我建议你先在Fibonacci系列中添加所有数字,然后再检查它们是否均匀,然后在下一循环中将其添加到新变量中。
  3. class Euler2 {
        public static void main(String args[]) {
            long n1=0,n2=1,n3,i,j;
            long sum = n1 + n2;
            for(i =2 ;i < 250; i++) {
                if (n3 > 40000000) {
                    break;
                }
                else {
                    n3 = n1 + n2;
                    if (n3%2 == 0) {
                        sum += n3;
                    }
                    n1 = n2;
                    n2 = n3;
                }
            }
            System.out.println("sum of all values: "+sum);
        }
    }
    

答案 1 :(得分:0)

所有偶数的总和

long sum = 0
for (int x = 1; x <= 200; x++) {
   if (x % 2 == 0)
     sum += x;
}

我不知道你的逻辑是什么。

另外我认为结果需要放在很长的

答案 2 :(得分:0)

您的代码存在一些问题:

  • 您正在有效地检查该号码是否为< 3999999,而问题是要求数字<= 4000000(尽管这不会改变结果)
  • 无需手动将int转换为Integer,甚至 if ,您不应使用new Integer,而应使用Integer.valueOf来使用缓存
  • 您可以将最终循环简化为for (Integer n : even) {sum += n;} ...
  • ...但您实际上并不需要在计算总和之前将所有这些数字存储在列表中
  • 实际问题:您要将每个三次添加到列表中:首先是third,然后是{{1}最后,当它在second

以下是一些应该有效的伪代码:

first