2013-09-21 3 views
1
public class Euler2 { 

    public static void main(String[] args) { 

     int Num1 = 0; 
     int Num2 = 1; 
     int sum = 0; 

     do 
     { 
      sum = Num1 + Num2; 
      Num1 = Num2; 
      Num2 = sum; 

      if (Num2 % 2 == 0) 
       sum = sum + Num2; 
     } 
     while (Num2 < 4000000); 

     System.out.println(sum); 
    } 
} 

Chaque nouveau terme de la séquence de Fibonacci est généré en ajoutant les deux termes précédents. En commençant par 1 et 2, les 10 premiers termes sont les suivants:Projet Euler 2 dans Eclipse utilisant Java

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

En considérant les termes la séquence de Fibonacci dont les valeurs ne dépassent pas quatre millions, trouve la somme des termes pairs.

Je ne pense pas que je codé mal, mais la réponse que je reçois est 5702887 et je sais qu'il devrait être 4613732.

+1

Essayez-vous de coder une sorte de formule mathématique établie? Si oui, veuillez préciser ce que c'est. Sinon, expliquez clairement ce que votre programme est censé faire. –

+0

Chaque nouveau terme de la séquence de Fibonacci est généré en ajoutant les deux termes précédents. En commençant par 1 et 2, les 10 premiers termes seront: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... En considérant les termes de la séquence de Fibonacci dont les valeurs ne dépassent pas quatre millions, trouvez la somme des termes pairs. c'est ce que j'essaie de montrer dans le code. –

+4

mec tout le but du projet euler est de résoudre les problèmes vous-même. C'est extrêmement gratifiant quand on en a un après les heures de travail (ils deviennent beaucoup plus difficiles). C'est aussi vraiment cool de voir les solutions des gens dans le forum une fois que vous l'avez résolu. Notez que le projet euler demande aux utilisateurs de ne pas partager comment résoudre des problèmes particuliers en ligne, car cela peut enlever la joie à tout le monde (projecteuler.com/about une fois connecté). bonne programmation! – vancan1ty

Répondre

5
public class Euler { 
    public static void main(String[] args) {  
     int num1 = 0; 
     int num2 = 1; 
     int temp = 0; 
     int sum = 0; 

     do { 
      if (num2 % 2 == 0) { 
       sum = sum + num2; 
      } 
      temp = num1 + num2; 
      Num1 = num2; 
      Num2 = temp; 
     } while (num2 < 4000000); 

     System.out.println(sum); 
    } 
} 

Vous foiré la somme en attribuant deux fois à chaque itération où num2 est encore. Dans cette solution, nous utilisons une variable temporaire pour stocker le prochain numéro de fibonacci.

+0

Cela ne nécessite-t-il pas 'num2 ++;' pour incrémenter la valeur? Lorsqu'il est exécuté sans 'num2 ++;', il me donne '257114'. Et si je le lance avec 'num2 ++', cela me donne '574906'. Dans ces deux cas, je ne reçois pas «4613732». S'il vous plaît corrigez-moi si je me trompe .. – YuDroid

+0

Pourquoi voudriez-vous incrémenter num2? Essayez d'exécuter le code, il renvoie le résultat correct, 4613732. – spydon

0

Je ne sais pas ce que le programme est censé faire, mais une partie de le problème peut être que vous assignez num2 à la valeur de sum avant votre instruction if, rendant l'intérieur de cette instruction if équivalente à sum = sum + sum; Sur une autre note, il est de mauvaise pratique de mettre en majuscule les noms de vos variables locales. Bonne chance!

+0

quand je le déclare après l'instruction if je me retrouve avec 4052018 –

0

Voici quelques conseils (et non une réponse complète puisque cela semble être devoirs):

  • Quand vous faites de Fibonacci, vous devez fournir les deux premiers termes que 1 et 2, de 0 et 1 tu es maintenant.
  • Le if (Num2 % 2 == 0) signifie que, comme l'a signalé user2573153, la valeur de sum est doublée chaque fois que Num2 est pair. Mais ce n'est pas comme ça que Fibonacci fonctionne. Je peux voir que vous essayez de résumer continuellement les termes pairs en utilisant cette instruction if. Alors, comment pouvez-vous faire sans gâcher sum? (Indice: mémorisez les nombres pairs ailleurs).
0

Je viens juste de le faire et je peux seulement vous dire que vous avez besoin d'un if (...% 2 == 0) {} et seulement résumer les nombres pairs .... J'espère que cela vous aide.

-2

JavaScript:

function printSumOfEvenFiboNumbersWithin (limit) { 
    var current = 2, prev = 1, next, sum = 0; 
    do { 
     next = current + prev; 
     prev = current; 
     current = next; 
     sum += prev % 2 == 0 ? prev : 0; 
    } while (prev < limit); 

    console.log(sum); 
} 

printSumOfEvenFiboNumbersWithin(4000000); // 4613732

1

Une autre solution, en utilisant:

  • while au lieu de do-while
  • bits opération au lieu de %
  • seulement 2 variables pour garder les valeurs efficaces (pas aux):

    public static void main(String[] args) { 
        int sum = 0 ; 
        int x1 = 1; 
        int x2 = 2; 
        while (x1 < 4000000) { 
         if ((x1 & 1) == 0){ // x % 2 == 0 
          sum += x1; 
         } 
         x2=x1+x2;    // x2 = sum 
         x1=x2-x1;    // x1 = the old value of x2 
        } 
        System.out.println(sum); 
    } 
    
1
public void execute() { 
     int total = 1; 
     int toBeAdded = 1; 
     int limit = 4000000; 
     int totalSum = 0; 
     int temp = 0; 
     while (total <= limit) { 
      if (total % 2 == 0) { 
       totalSum = totalSum + total; 
      } 
      temp = toBeAdded; 
      toBeAdded = total; 
      total = toBeAdded + temp; 
     } 
    } 
-1

Swift 3:

func evenFibonacciNumbersSum() -> Int { 

    // init first two Fibonacci numbers 
    // init sum is 2 (counting only even numbers) 
    var result = 2 
    var firstFibonacci = 1 
    var secondFibonacci = 2 

    while true { 

     // new (next) number is a sum of two previous numbers 
     let nextFibonacci = firstFibonacci + secondFibonacci 

     // check if new Fib number is even 
     if nextFibonacci % 2 == 0 { 
      // if even - add to result 
      result += nextFibonacci 
     } 

     // if new Fib number hit 4M - no more calculations 
     if nextFibonacci > 4000000 { 
      return result 
     } 

     // to move on we need to reassign values 
     firstFibonacci = secondFibonacci 
     secondFibonacci = nextFibonacci 
    } 
} 

print(evenFibonacciNumbersSum()) // will print 4613732 
-1

Cela devrait fonctionner:

public static void main(String[] args) 
{ 
    int n1=0; 
    int n2=1; 
    int n3=0; 
    int count=10000; 
    int limit=4000000; 
    int sum=0; 
    for(int i=1;(i<=count && n3<=limit); i++) 
    { 
     n3=n1+n2; 
     if(n3%2==0){ 
      sum = sum+n3; 
      System.out.println(sum); 
     } 
     n1=n2; 
     n2=n3; 
    } 
} 
+0

Bienvenue à SO. S'il vous plaît jeter un oeil à cela: http://stackoverflow.com/help/how-to-answer –

+0

Cela arrive à la réponse que le PO cherche. – jww

0

Cela pourrait vous aider ...

#include<stdio.h> 
int main() 
{ 
    int i,a = 0,b = 1,temp = 0,sum = 0; 
    while(temp < 4000000) 
    { 
     temp = a + b; 
     printf("%d\n",temp); 
     a = b; 
     b = temp; 
     if(temp % 2 == 0) 
     { 
      sum = sum + temp; 
     } 
    } 
    printf("The sum is :- %d\n", sum); 
    return 0; 
}