Heim > Backend-Entwicklung > C++ > Wie generiert man alle k Kombinationen von n Elementen in C?

Wie generiert man alle k Kombinationen von n Elementen in C?

DDD
Freigeben: 2024-11-21 07:56:11
Original
198 Leute haben es durchsucht

How to Generate All k Combinations of n Items in C  ?

Algorithmus zum Generieren aller k Kombinationen von n Elementen in C

Die vorliegende Aufgabe besteht darin, ein Programm zu erstellen, das alle möglichen Kombinationen generiert und anzeigt Kombinationen von k verschiedenen Personen aus einer Menge von n Individuen. Dies kann mithilfe eines kombinationsgenerierenden Algorithmus erreicht werden, der wie folgt funktioniert:

Algorithmus:

  1. Eine Bitmaske mit einer Folge von K initialisieren führende Einsen: Diese Bitmaske bedeutet, dass die ersten K Personen in der Menge zunächst dem zugewiesen werden Kombination.
  2. Ändern Sie die Größe der Bitmaske auf N Bits und hängen Sie N-K nachgestellte Nullen an: Dieser Schritt erweitert die Bitmaske, um alle n Personen im Satz abzudecken.
  3. Iterieren durch alle möglichen Permutationen der Bitmaske: Jede Permutation repräsentiert eine andere Kombination von K Personen.
  4. Für jede Permutation:

    • Extrahieren Sie die Indizes der gesetzten Bits in der Bitmaske. Diese Indizes stellen die Mitglieder der aktuellen Kombination dar.
    • Drucken Sie die Kombination aus.
  5. Wiederholen Sie Schritt 3, bis alle Permutationen erschöpft sind: Dies wird alle möglichen Kombinationen von K Personen aus der Menge von generiert haben n.

Implementierung in C:

#include <algorithm>
#include <iostream>
#include <string>

void comb(int N, int K)
{
    std::string bitmask(K, 1); // K leading 1's
    bitmask.resize(N, 0); // N-K trailing 0's

    // print integers and permute bitmask
    do {
        for (int i = 0; i < N; ++i) // [0..N-1] integers
        {
            if (bitmask[i]) std::cout << " " << i;
        }
        std::cout << std::endl;
    } while (std::prev_permutation(bitmask.begin(), bitmask.end()));
}

int main()
{
    comb(5, 3);
}
Nach dem Login kopieren

Beispielausgabe:

0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie generiert man alle k Kombinationen von n Elementen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage