2015-12-04 4 views
0

Слово Проблема Я пытаюсь решить:

Каждый новый член последовательности Фибоначчи образуется сложением двух предыдущих условий. Начиная с 1 и 2, первые 10 терминов будут следующими:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Рассматривая термины в последовательности Фибоначчи значения не превышают четырех миллионов, найдите сумму четных членов.
некорректный вывод для проекта Эйлера # 2 - Java

Я уверен, что вы уже встречали вопросы об этой проблеме в Project Euler, но я не уверен, почему мое решение не работает, поэтому я надеюсь, что вы сможете помочь!

public class Problem2Fibonacci { 

public static void main(String[] args) { 
    /* Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be: 
     1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 
     By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms. */ 

    int sum = 0; // This is the running sum 
    int num1 = 1; // This is the first number to add 
    int num2 = 2; // This is the second number 
    int even1 = 0; 
    int even2 = 0; 
    int evensum = 0; 

    while (num2 <= 4000000){ // If i check num2 for the 4000000 cap, num will always be lower 

     sum = num1 + num2; // Add the first 2 numbers to get the 3rd 

     if(num2 % 2 == 0){ // if num2 is even 
      even1 = num2; // make even1 equal to num2 
     } 
     if(sum % 2 == 0){ // if sum is even 
      even2 = sum; // make even2 equal to sum 
     } 
     if (even1 != 0 && even2 != 0){ // If even1 and even2 both have values 
     evensum = even1 + even2; // add them together to make the current evensum 
     even2 = evensum; 
     } 
     num1 = num2; 
     num2 = sum; 
     System.out.println("The current sum is: " + sum); 
     System.out.println("The current Even sum is: " + evensum); 
    } 
    } 
}      

Так мои 2 вопросы, 1. Почему не мой план, чтобы получить сумму четных чисел работает правильно? и 2. В прошлый раз, когда мой цикл работает, он использует num2, который составляет> 4000000. Почему?

Спасибо!

+0

добавьте детали вопроса и отформатируйте вопрос, пожалуйста, для лучшей читаемости. – nullpointer

+0

Эй, @Adbelhak, можете ли вы рассказать мне, что я сделал не так в своем форматировании, который не включал мою первую и последнюю строки? Я просто вставил свой код в место, созданное при нажатии кнопки «Код». Благодаря! –

ответ

0

Это должно помочь вам:

int first = 0; 
    int second = 1; 
    int nextInSeq =first+second; 
    int sum =0; 

    while(nextInSeq < 4000000) { 
     first = second; 
     second = nextInSeq; 
     nextInSeq = first + second; 
     if(nextInSeq % 2 ==0) 
      sum = sum + nextInSeq; 
     System.out.println("Current Sum = " + sum); 
    } 
    System.out.println("Sum = " + sum); 

Для вашего куска кода: even1 и even2 не требуется, и они несут значение они занимают от предыдущих итераций, как вы по-прежнему.

+0

, и это даст вам правильный ответ. Подтверждено;) – nullpointer

+0

Эй, @nullpointer, спасибо за помощь! В следующий раз я постараюсь отформатировать вопрос. Любая идея, где ошибка была в моей логике? –

+0

вы, в то время как условие имеет 'num2 <= 4000000', а затем вы оцениваете sum =' num1 + num2' [что в случае, если число 2 равно 3524578, а num1 равно 2178309?] Ваша сумма превысила бы сумму, а затем условия в которых вы используете 'even1' и' even2', не подходят, как указано в ответе. – nullpointer

Смежные вопросы