Générer des combinaisons en C : une solution complète
La génération de combinaisons est une tâche de programmation fondamentale qui implique la sélection d'un nombre spécifique d'éléments dans un ensemble . Par exemple, si nous avons un ensemble S = {1, 2, 3, 4, 5} et que nous voulons générer des combinaisons de taille r = 2, la sortie inclura des combinaisons telles que (1, 2), (1, 3 ), (2, 3), et ainsi de suite.
Un moyen efficace de générer des combinaisons en utilisant C consiste à utiliser la manipulation de bits. Nous pouvons initialiser un vecteur de booléens de longueur n, représentant les éléments de l'ensemble, puis remplir les r premiers éléments avec vrai. Cela signifie que les éléments correspondants sont sélectionnés dans la combinaison actuelle.
L'étape suivante consiste à créer toutes les permutations de ce vecteur de sélection à l'aide de la fonction std::next_permutation. Pour chaque permutation, nous vérifions si un élément est sélectionné (indiqué par une valeur vraie dans le vecteur) et imprimons l'élément correspondant. En parcourant toutes les permutations, nous pouvons générer toutes les combinaisons possibles.
Voici un extrait de code utilisant cette approche :
#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; }
Alternativement, nous pouvons utiliser la fonction std::prev_permutation pour générer des combinaisons par ordre croissant :
#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.begin(), v.begin() + r, true); do { for (int i = 0; i < n; ++i) { if (v[i]) { std::cout << (i + 1) << " "; } } std::cout << "\n"; } while (std::prev_permutation(v.begin(), v.end())); return 0; }
En utilisant ces techniques, nous pouvons générer efficacement des combinaisons en C, fournissant un outil puissant pour diverses applications algorithmiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!