Ne peut pas tout à fait obtenir de Projet Euler problème #2 compris
Je suis en train d'apprendre les bases du C++ en passant par certaines Projet Euler problèmes. Je l'ai fait à...#2.
Chaque nouveau terme dans le Fibonacci
la séquence est générée par l'ajout de l'
cours des deux termes. En commençant par 1
et 2, les 10 premiers termes seront:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Trouver la somme de toutes la même valeur
termes dans la séquence qui ne sont pas
plus de quatre millions de dollars.
Ma logique:
0, 1, 1, 2, 3, 5
x y z
x y z
x y z
x y z
Le dessus est en parcourant ce:
x + y = z
x = y
y = z
Mon code:
#include <iostream.h>
using namespace std;
int main()
{
int x = 0;
int y = 1;
int z;
int sum;
for(y = 1; y <= 4000000; y++) {
z = x + y;
x = y;
y = z;
if(y % 2 == 0) {
sum += y;
}
}
cout << sum;
cin.get();
}
Que les sorties 4613788
La réponse correcte, cependant, est 4613732
.
Je ne sais pas quel est le problème. =/.
OriginalL'auteur Andrew | 2009-11-30
Vous devez vous connecter pour publier un commentaire.
Vous utilisez
y
à la fois comme la variable de boucle, et le deuxième terme de la séquence.Ce que tu veux faire c'est:
En notant que vous devez probablement initialiser
sum
.Oh, ok. Que (et la définition de
sum = 0
), il fixe. Il m'a fallu une seconde pour comprendre pourquoi, mais je pense que je l'ai. Merci à vous trois! 🙂OriginalL'auteur Matt Joiner
Pour une amélioration de la vitesse, notez que la séquence est pair-Impair-Impair (répétitions), pair-Impair-Impair.
Vous n'avez pas besoin de tester chaque numéro pour savoir si il est pair ou impair. Juste ajouter chaque troisième numéro.
+1 pour me mettre au courant de quelque chose que je n'ai jamais remarqué dans la séquence de Fibonacci! Est-il une preuve de cette propriété?
La preuve? La preuve par l'examen: pair + Impair est toujours Bizarre. Impair + Impair est toujours Même. (alors, vous êtes de retour au point de départ du cycle. Ce n'est pas une propriété de Fibonacci; c'est une propriété de l'addition.
N'est-ce pas encore une évaluation à chaque itération de trouver chaque troisième étape, c'est à dire de négociation de l'analyse de chaque numéro de la régularité avec le test de chaque étape pour voir si c'est un multiple de 3?
OriginalL'auteur abelenky
Vous n'êtes pas à l'initialisation de la somme à zéro.
OriginalL'auteur Alex Deem
La boucle de bloc de code doit être quelque chose comme
Fondamentalement, vous ne devriez pas incrément de y.
OriginalL'auteur Vijay Kotari
Ici est de savoir comment nous pouvons le faire en un minimum de nombre de boucles. Si nous écrivons la suite de Fibonacci en termes des deux premiers chiffres, c'est:
un,
b
, (a+b), (a+2b),(2a+3b)
, (3a+5b), (5a+8b),(8a+13b)
, (13a+21b), (21a+34b),(34a+55b)
....Dans la série ci-dessus
a
est 1 etb
est de 2, a mis en évidence les nombres sont des nombres pairs. Dans la suite de Fibonacci chaque troisième numéro est le même numéro de séquence est pair-IMPAIR-IMPAIR-MÊME-. Donc, si nous écrire, même numéro de cette série, c'est:b, (2a+3b), (8a+13b), (34a+55b), (144a+233b)...
Si nous observons modèle dans cette série,
coefficient_of_next_a
est4*(coefficient_of_current_a)+(coefficient_of_previous_a)
.Et
coefficient_of_next_b
est(coefficient_of_current_a)+(coefficient_of_current_b)+(coefficient_of_next_a)
.Code Python:
De sortie est:
OriginalL'auteur Harshveer Singh
Ici est une façon de résoudre ce problème en temps O(log(N))-temps contre le ralentissement de O(N) mise en œuvre (O(log(N)) vient de la nécessité d'utiliser la fonction pow ()).
Tout d'abord, vous devez être en mesure de calculer le N-ième nombre de Fibonacci en O(log(N)) durée:
où PHI = 1.6180339... et PSI = -0.61803398... (découvrez wiki pour plus d'info)
Deuxièmement, vous aurez besoin de calculer le plus proche de l'indice cible de la limite (dans le problème 2 cas ce serait de 4 000 000):
Troisième, vous allez utiliser le B&Q d'identité n ° 25 (plus d'infos ici) pour le calcul de la somme des nombres de Fibonacci:
Enfin, calculer la somme:
nous avons seulement besoin de chaque troisième élément pour calculer la somme des nombres de Fibonacci.
Espérons que cette aide!
Va
OriginalL'auteur mevatron
OriginalL'auteur andy
J'ai récemment commencé à étudier l'art des arcanes de Perl...(ON AIME!)
mais je vais vous expliquer... nous avons besoin de trois variables que nous allons passer nos 2 valeurs que nous avons besoin pour trouver la prochaine étape de la séquence(qui sera affecté à la 3ème var comme ce
$c=$a;$a=$b;$b=$c;
).$a
et$b
sont déclarées à l'avance car nous savons que le fibo commence avec eux($a,$b=(0,1)
). À partir de là, nous obtenons une boucle while rouler aussi longtemps que notre variable que nous utilisons dans notre boologic est à moins de 4mil(while($a<4*10**6)
). À chaque itération, nous vérifions pour le même nombre($a%2==0
) avec le module et plus égal à notre $variable sum($sum+=$a
). Après avoir mélangé les variables(comme mentionné précédemment), c'est juste 'imprimer et à faire".Je sais que tu voulais le faire en C/C++ (perl est écrit en C), mais je viens de déconner avec la droite d'euler problèmes en Perl et pensé que cela pourrait donner un aperçu.
si elle n'aide pas du tout(à part de ne pas être la bonne langue) s'il vous plaît dites-moi comment faire pour améliorer ma réponse donc je ne peux fournir de meilleures réponses dans l'avenir. Plus important encore, bonne journée!
Golf quelqu'un?
OriginalL'auteur Lane Grooms
Il montre chaque Séquence de Fibonacci Nombre et sélectionne même,
à la fin donne la somme de la même.
OriginalL'auteur T4RZ4N
Essayer de rajouter un peu d'aide pour le problème.Programme suivant affiche tous les numéros de série de fibonacci pour une longueur donnée de la série qui est entrée par l'utilisateur.
OriginalL'auteur Deepeshkumar
Ici est de savoir comment le faire dans Swift:
Les résultats du programme:
OriginalL'auteur Faisal Memon
Une solution à l'aide de Kotlin, je suis en utilisant ce problèmes à ma pratique de mathématiques et d'apprendre ce nouveau langage pour moi:
C'est un peu verbeux, car, je suis en ajoutant la testabilité, si vous voulez voir l'Unité de Test, c'est ici:
https://github.com/moxi/project-euler-solutions/blob/master/code/src/test/kotlin/org/rcgonzalezf/onetoten/Problem2Test.kt
OriginalL'auteur moxi
Chaque 3ème numéro est le même, de sorte que la somme d'un nombre pair est (somme de n fib numéros)/2.
Mais, certains de n fib. nombres = (n+2)'terme - 2ème terme(1).
Vous pouvez obtenir (n+2)ème terme de benet la formule de
OriginalL'auteur JagsVG
En javascript, vous pouvez le résoudre comme ceci:
OriginalL'auteur shekhardtu
OriginalL'auteur Sajan Legend