2016-10-30 6 views
0

Ich versuche gerade einige Probleme der Euler-Projekte zu lösen, bin aber momentan am zweiten Problem festgefahren. Hier ist es, was ich jetzt:Fibonacci Sequenz mit Vektoren

void p002() 
{ 
    unsigned int result = 0;  
    std::vector<int> fibonacci{ 1,2 }; 

    for (int i = 2; fibonacci.at(i) < 4000000; i++) 
    { 
     fibonacci.at(i) = fibonacci.at(i - 1) + fibonacci.at(i - 2); //<- Doesn't work 
     if (fibonacci.at(i) % 2 == 0) 
      result += fibonacci.at(i); 
    } 

    std::cout << result; 
} 

Könnte mir jemand helfen und mir sagen, warum diese eine Zeile nicht zu funktionieren scheint? (Ich bekomme einen "abort()" -Fehler, wenn ich versuche, den Code auszuführen.)

Falls sich jemand wundert: Die Aufgabe ist es, die Summe aller ganzen Zahlen der Fibonacci-Folge mit einem niedrigeren Wert als 4.000.000 zu erhalten sogar geschätzt.

Danke!

+0

Vektoren können ihre Größe nicht ändern, ohne dass Sie die entsprechende (n) Funktion (en) aufrufen. Das sollte genug Informationen sein, um Sie wissen zu lassen, was das Problem sein könnte. Zweitens ist dies ein Einzeiler, der 'std :: accumulate' und [Binets Formel] verwendet (http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibFormula.html#section1) – PaulMcKenzie

+0

* Die Aufgabe besteht darin, die Summe aller ganzen Zahlen der Fibonacci-Folge mit einem niedrigeren Wert als 4.000.000 zu erhalten, die gerade bewertet werden. * - Sie brauchen auch keinen Vektor, um das Problem zu lösen, wenn Sie die obige Formel verwenden im Kommentar, und nur Schleife, Hinzufügen zu einer Gesamtmenge. – PaulMcKenzie

Antwort

1

vector::at löst eine Ausnahme aus, wenn Sie versuchen, auf ein Element mit einem Index zuzugreifen, der außerhalb der zulässigen Grenzen liegt. Ihr Vektor enthält 2 Elemente (bei den Indizes 0 und 1). Daher ist fibonacci.at(2) außerhalb der Grenzen, und eine Ausnahme wird ausgelöst. Sie fangen die Ausnahme nicht, also wird std::terminate aufgerufen. Standardmäßig zeigt std::terminate auf abort, die Ihren Prozess beendet.

Lösung: Fügen Sie genügend Elemente in den Vektor ein, so dass fibonacci.at(i) nicht außerhalb der Grenzen ist.