2016-06-30 11 views
0

helfen Sie bitte dieses grundlegende Problem zu lösen. Ich habe unten eine Frage erhalten.Arbeiten mit Funktion in C++

berechnen Modul von A und B ganze Zahlen zehntausend Millionen sieben mit der Funktion F (A, B, N), wie nachstehend unter Verwendung von C erläutert ++ mit 0 < = N < = 1000000000.

Modulus of F[A, B, 0] is equal to A%1,000,000,007 
Modulus of F[A, B, 1] is equal to B%1,000,000,007 
Modulus of F[A, B, N] is equal to modulus of F[A, B, N - 1] + F[A, B, N - 2] 

Example, Modulus of F[3, 4, 5] is equal to 29. In detail: 

Modulus of F[3, 4, 0] is equal to 3%1,000,000,007 which is 3 

Modulus of F[3, 4, 1] is equal to 4%1,000,000,007 which is 4 

Modulus of F[3, 4, 2] is equal to modulus of F[3, 4, 1] + F[A, B, 0] which is 3 + 4 = 7 

Modulus of F[3, 4, 3] is equal to modulus of F[3, 4, 2] + F[A, B, 1] which is 7 + 4 = 11 

Modulus of F[3, 4, 4] is equal to modulus of F[3, 4, 3] + F[A, B, 2] which is 11 + 7 = 18 

Modulus of F[3, 4, 5] is equal to modulus of F[3, 4, 4] + F[A, B, 3] which is 18 + 11 = 29 

I verwendet Xcode und Mac OS X und hier ist mein Code.

#include <iostream> 
#include <vector> 

int solution(int A, int B, int N) 
{ 
    std::vector<int> remainderVector; 

    if (N < 0 || N > 1000000000) 
    { 
     std::cout << "N is out of range." << std::endl; 
    } 

    if (N == 0) 
    { 
     remainderVector[N] = A%1000000007; 
    } 

    if (N == 1) 
    { 
     remainderVector[N] = B%1000000007; 
    } 

    if (N > 1 && N <= 1000000000) 
    { 
     remainderVector[0] = A%1000000007; 
     remainderVector[1] = B%1000000007; 

     for (int i = 2; i <= N; i++) 
     { 
      remainderVector[i] = remainderVector[i - 1] + remainderVector[i - 2]; 
     } 
    } 

    std::cout << "Remainder is: " << remainderVector[N] << std::endl; 

    return 0; 
} 

int main() 
{ 
    std::cout << "Input A interger: " << std::endl; 
    int x; 
    std::cin >> x; 

    std::cout << "Input B interger: " << std::endl; 
    int y; 
    std::cin >> y; 

    std::cout << "Input Z interger: " << std::endl; 
    int z; 
    std::cin >> z; 

    int solution(int x, int y, int z); 

    std::cout << "This is a debug message." << std::endl; 
    return 0; 
} 

Wenn ich diesen Code ausführen, erschien nur Nachricht: Dies ist eine Debug-Nachricht. Warum habe ich Nummer 29 nicht ausgedruckt, wenn ich ein Beispiel von 3, 4, 5 wie oben beschrieben eingegeben habe.

Vielen Dank für Ihre Hilfe.

+3

Haben Sie Ihr Programm debuggen? –

+0

Ihr Aufruf an die "Lösung" ist eine Prototypdeklaration, kein Funktionsaufruf. Versuchen Sie es mit "Lösung (x, y, z);" Ich bin überrascht, dass das schwierig ist. – Tezirg

+0

Danke, ich änderte zu Lösung (x, y, z) und es funktioniert, wenn ich auch Größe des Vektors zu N + 1 erkläre. Vielen Dank. –

Antwort

0

Ihre remainderVector ist zunächst leer, Sie können also keine beliebigen Elemente darin zuweisen (da sie nicht existieren). Wechsel:

std::vector<int> remainderVector; 

zu

std::vector<int> remainderVector(N + 1); 

Beachten Sie auch, dass die Logik in den verbleibenden Code ein wenig verworren aussieht und hat eine gewisse Redundanz. Eine feste/vereinfachte Version wäre:

remainderVector[0] = A%1000000007; // set element 0 

if (N > 0)       // set element 1 
{ 
    remainderVector[1] = B%1000000007; 
} 

for (int i = 2; i <= N; i++)  // set elements 2..N 
{ 
    remainderVector[i] = remainderVector[i - 1] + remainderVector[i - 2]; 
} 
+0

Ich habe die Größe des Vektors in N + 1 geändert und es funktioniert. Ich habe die Größe des Vektors nicht angegeben, weil erklärt wird, dass der Vektor seine Größe automatisch verstehen kann oder keine Notwendigkeit, seine Größe beim Initiieren anzugeben. Hier ist der Link, den ich studiert habe http://www.learncpp.com/cpp-tutorial/6-16-an-introduction-to-stdvector/. –

+0

Ein 'std :: vector' wird automatisch größer, wenn Sie z. 'push_back', um ein Element hinzuzufügen, aber Sie können es nicht einfach über die aktuelle Größe hinaus indizieren und erwarten, dass es automatisch wächst, um dies zu berücksichtigen. –

+1

Hallo Paul, jetzt verstehe ich, dass "es nicht in der Lage ist, Vektor zufällig über seine aktuelle Größe zu indizieren", wie Sie erklärt haben. Danke, dass du mir Pushback beigebracht hast. In dem oben angegebenen Link sehen Sie, dass der Autor niemals die Vektorgröße angibt. In Ihrem Code zum Setzen von Element 0, Element 1 und Element i haben Sie push_back nicht verwendet. Es ist wirklich ein Durcheinander für mich. Nebenbei habe ich eine gute Lektion gelernt. Vielen Dank Paul. –