Combinaison

Signaler
Messages postés
72
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2008
-
Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010
-
Bjr a tous,

J'ai un petit problème d'algorithme,
J'aimerai crées un prog qui me donne des arrangement
expl si je lui rentre 1,2,3,4,5,6,7
et que la taille d'un groupe est 5 je voudrai qu'il me sorte:
1 2 3 4 5
1 2 3 4 6
1 2 3 4 7
1 2 3 5 6
1 2 3 5 7
1 2 3 6 7
1 2 4 5 6
1 2 4 5 7
1 2 4 6 7
etc
ds cett exple j'ai 21 combinaison
Je c que pour trouver le nbr de combinaison j'utilise: fact(y) / (fact(x) * fact(y-x))
Mais je n'arrive pas a trouvé comment afficher tt les combinaison.
Merci pour votre aide.

5 réponses

Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010

for(i=1; i<=7; i++)
for(j=i+1; j<=7; j++)
for(k = j+1; k<=7; k++)
for(l=k+1; l<=7; l++)
for(m=l+1; m<=7; m++)
printf("%i %i %i %i %i \r\n", i, j, k, l, m);
Messages postés
72
Date d'inscription
vendredi 4 avril 2003
Statut
Membre
Dernière intervention
2 novembre 2008

bjr
merci d'avoir repondu mais mon problème si maintenant je veux les faire par groupe de 6
il me manque 1 for!!!
Comment pourais je résoudre ce problème. Je voudrais que ce nbr soit variable.

Merci Laurent.
Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010

En utilisant de fonction recursive on pourrait y arriver. Je vais étudier.
Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010

Voilà. N'abuse pas sur la valeur de n parceque c'est une fonction recursive. Essaie avec de petite valeur, et bonne prog.

void Combinaison(int n, int p, int debut, int rang, const char * szBuf)
{
char szTemp[128];
int rangTemp;

if(!szBuf)
return;

rangTemp = rang + 1;
if(rangTemp>=p)
printf(szBuf);
else
{
for(int i=debut; i<=n; i++)
{
sprintf(szTemp, "%s %i", szBuf, i);
Combinaison(n, p, debut+1, rangTemp, szTemp);
}
}
}

// dans main()
{
.........
// combinaison de 5 chiffres pris dans 7 chiffres commençant par 1.
// ici le rang debute par 0.
Combinaison( 7, 5, 1, 0, "");
}
Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010

Pour que chaque combinaison s'affiche sur une nouvelle ligne, rectifie la fn Combinaison:
......
if(rangTemp>=p)
{
printf(szBuf);
printf("\r\n");
}
......