Heim >Backend-Entwicklung >C++ >Wie kann ich mithilfe von Permutationen Kombinationen in C generieren?

Wie kann ich mithilfe von Permutationen Kombinationen in C generieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-30 19:04:13486Durchsuche

How Can I Generate Combinations in C   Using Permutations?

Erzeugen von Kombinationen in C mithilfe einfacher Permutationen

In C können Sie Kombinationen mithilfe eines einfachen Ansatzes mit Permutationen generieren. Diese Methode erfordert ein Verständnis des Konzepts der Permutationsgenerierung, bei dem die Reihenfolge der Elemente von Bedeutung ist.

Algorithmus-Übersicht:

  1. Erstellen Sie einen booleschen Vektor v der Größe n, wobei n die Gesamtzahl der Elemente in der Menge ist.
  2. Setzen Sie die ersten r Elemente von v auf „true“. Dieser Schritt wählt die ersten r Elemente aus der Menge aus.
  3. Verwenden Sie die Funktion next_permutation oder prev_permutation, um alle Permutationen des booleschen Vektors zu generieren.
  4. Drucken Sie für jede Permutation die Indizes der entsprechenden Elemente aus die wahren Werte in v.

Implementierung:

Hier ist eine Implementierung dieses Algorithmus unter Verwendung von next_permutation:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    int n, r;
    std::cin >> n;
    std::cin >> r;

    std::vector<bool> v(n);
    std::fill(v.end() - r, v.end(), true);

    do {
        for (int i = 0; i < n; ++i) {
            if (v[i]) {
                std::cout << (i + 1) << " ";
            }
        }
        std::cout << "\n";
    } while (std::next_permutation(v.begin(), v.end()));
    return 0;
}

Erklärung:

Die Funktion next_permutation generiert die nächste lexikografische Permutation von boolescher Vektor. Indem wir über den Vektor iterieren und die Indizes der wahren Werte ausgeben, erhalten wir Kombinationen der ersten r Elemente in der Menge.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Permutationen Kombinationen in C generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn