Écrit un programme en langage C qui génère et affiche toutes les combinaisons possibles de k éléments dans n éléments d'un tableau
Version imprimable
Écrit un programme en langage C qui génère et affiche toutes les combinaisons possibles de k éléments dans n éléments d'un tableau
Ouais, bonjour, s'il vous plait, merci, c'est quand tu veux. Et visiblement tu veux pas.
Sinon, tu as une question précise ou tu es juste venu nous dire quoi faire pendant que tu vas jouer au foot?
Algorithme itératif pour générer les combinaisons de p éléments parmi n : lien developpez.com :mrgreen:
Par contre, on ne peut plus commenter :roll: et je trouve ce billet assez mal expliqué.
En gros, l'algo incrémente toujours la position la + à droite tant que toutes les valeurs n'ont pas été prises (<- de prime abord c'est clair obscure :aie:)
Bonjour,
Désolé alors :oops:, en fait c'est assez simple :
Chaque combinaison de p éléments est représentée par une séquence d'indices (i0, i1, ..., ip-1) :
Par exemple dans l'ensemble (a, b, c, d, e, f), la séquence d'indices (0, 1, 2) va représenter la combinaison (a, b, c).
La liste des séquences ordonnées représentant l'ensemble des combinaisons de p éléments dans n est affichée dans un tableau.
Pour générer le tableau, tu pars de la séquence mini (0, 1, ..., p-1), et tu incrémentes à chaque fois les indices de la séquence (i0, i1, ..., ip-1) représentant une combinaison c(p,n), un peu comme tu le ferais pour des chiffres décimaux, sauf que tu dois toujours respecter (i0 < i1 < ... < ip-1).
Prenons les combinaisons de 3 éléments parmi 6, c(3,6), les valeurs d'indice vont de 0 à 5, et les séquences d'indices comportent 3 indices (i0, i1, i2) :
On doit chaque fois respecter i0 < i1 < i2
On part donc de :
0 1 2
i2=2 est le 1er indice en partant de la droite qui peut être incrémenté en respectant i0<i1<i2, on obtient donc :
0 1 3
Toujours i2 premier indice :
0 1 4
jusqu'à :
0 1 5
On peut plus l'incrémenter, donc on passe à i1 premier indice en partant de la droite qui peut être incrémenté en respectant i0<i1<i2, et on "recale" l'indice à droite de i1 (par rapport à i1) :
0 2 3
On peut plus incrémenter i1, i2 devient le 1er depuis la droite qui peut l'être :
0 2 4
0 2 5
On peut plus incrémenter i2, i1 devient le 1er depuis la droite qui peut l'être, et on "recale" l'indice a droite de i1 :
0 3 4
etc..
jusqu'à :
3 4 5
Cdlt,