Frage

Dieser Code wurde aus einer anderen Benutzerfrage kopiert und ich bin gespannt, wie die Akkumulierung hier funktioniert.Ich erhalte mit diesem Code das korrekte Ergebnis, möchte aber wissen, welche Parameter lcm bei „Akkumulieren“ annimmt.Der Init als A und die Summe des Bereichs als b?Bitte helfen Sie

#include <numeric>

int gcd(int a, int b)
{
    for (;;)
    {
        if (a == 0) return b;
        b %= a;
        if (b == 0) return a;
        a %= b;
    }
}

int lcm(int a, int b)
{
    int temp = gcd(a, b);

    return temp ? (a / temp * b) : 0;
}

int main()
{
    int arr[] = { 5, 7, 9, 12 };

    int result = std::accumulate(arr, arr + 4, 1, lcm);

    std::cout << result << '\n';
}
War es hilfreich?

Lösung

Das erste Argument, das lcm wird nehmen ist der bisher akkumulierte Wert (der beginnt bei 1, das dritte Argument von std::accumulate), und das zweite Argument wird ein Element in sein arr.Als nächstes, was auch immer lcm return wird als erstes Argument und als nächstes Element in übergeben arr als Zweiter.

Sehen eine Referenz für mehr Details.

Man könnte leicht schreiben a Und b zur Standardausgabe im Inneren lcm um zu sehen, was passiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top