Combinaison

laurent180 Messages postés 72 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 2 novembre 2008 - 22 janv. 2006 à 11:54
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010 - 23 janv. 2006 à 14:37
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

gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
22 janv. 2006 à 16:17
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);
0
laurent180 Messages postés 72 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 2 novembre 2008
22 janv. 2006 à 21:39
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.
0
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
23 janv. 2006 à 13:33
En utilisant de fonction recursive on pourrait y arriver. Je vais étudier.
0
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
23 janv. 2006 à 14:30
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, "");
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
23 janv. 2006 à 14:37
Pour que chaque combinaison s'affiche sur une nouvelle ligne, rectifie la fn Combinaison:
......
if(rangTemp>=p)
{
printf(szBuf);
printf("\r\n");
}
......
0
Rejoignez-nous