cs_mohamed123
Messages postés2Date d'inscriptiondimanche 7 août 2005StatutMembreDernière intervention 4 août 2008
-
7 juin 2007 à 13:45
manandpc -
6 août 2012 à 04:32
bonjour,
j'ai besoin d'un programme qui liste toute les combinaisons possibles de taille k dans un ensemble de taille n.
Cnp {l'ensemble peut etre {1,2,...,n}}.
j'ai bessoin de ce code pour mon projet.
Merci d'avance pour l'aide!
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 7 juin 2007 à 14:27
salut
j'espère que cette version récursive te plaira
void combinaisons(int *ens, int *combinaison, int n, int p, int i, int t, void (*func)(int*,int)) {
if (i<p) {
int k;
for (k=t; k<n; k++) {
combinaison[i] = ens[k];
combinaisons(ens,combinaison,n,p,i+1,k+1,func);
}
}
else {
func(combinaison,p);
}
}
void afficher( int *p, int n) {
int i;
for (i = 0; i < n; i++) printf("%d ", p[i]);
printf("\n");
}
int main() {
int ens[] = {1,2,3,4,5,6};
int combi[4];
combinaison(ens,combi,6,4,0,0,afficher);
}
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 7 juin 2007 à 14:46
sinon la plus jolie version serait plutôt celle ci:
void combi2(int *ens, int *cmb, int n, int p , int i, int k, void (*func)(int*,int)) {
if (k == p) func(cmb,p);
else if (i < n) {
combi2(ens,cmb,n,p,i+1,k,func);
cmb[k] = ens[i];
combi2(ens,cmb,n,p,i+1,k+1,func);
}
}
qui implémente la formule C(n+1,p+1) = C(n,p) + C(n,p+1)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 9 juin 2007 à 11:10
Salut
ce que je veux dire, c'est que les mots de 3 lettres faisables avec a b c, t'as pas que :
abc
acb
bac
cab
cba
bca
t'as aussi :
aab
aba
baa
...
il veut peut-etre recuperer aussi ceux la... ou peut-etre au contraire, ne pas lister deux mots qui contiennent les memes lettres
alors pour des mots de 2 lettres pour a, b, c t'aurais
Voici un programme de generation tres court et tres efficace :
#include <stdio.h>
void main(int argc, char *argv[]) {
const int n 5; const int k 3;
int comb[40] = {0};
int i = 0;
while (i >= 0) {
if (comb[i] < n + i - k + 1) { comb[i]++;
if (i == k - 1) {
for (int j = 0; j < k; j++) printf("%d ", comb[j]); printf("\n");
} else { comb[++i] = comb[i - 1]; }
} else i--; } }