Algo affichage combinaison de p elemt parmi n

Fermé
brah - 7 janv. 2008 à 12:06
manandpc Messages postés 1 Date d'inscription lundi 6 août 2012 Statut Membre Dernière intervention 6 août 2012 - 6 août 2012 à 09:18
Bonjour,
je cherche un algo ou code (c# ou c++) dont le but est d'afficher toutes les combinaisons possible de p element d'un tableau d'entiers de n
elements exemple :
j'ai un tableau de 3 element int[] tab = {1,2,3} et que je veux les combinaisons de 2 elements.
resultats
12
12
23

je veux un algo generique pour un tableau de n entier, et le nombre d'element des combinaisons est p (C(n,p))
merci

9 réponses

star.ahmed35 Messages postés 4 Date d'inscription mardi 17 novembre 2009 Statut Membre Dernière intervention 22 novembre 2009 3
21 nov. 2009 à 20:26
Salut
je cherche un programme c ou c++ ou pascal ou basic ou n'inporte quels langage informatique qui permet de resoudre le probleme suivante:
je cherhe les combinaisons des X entiers a base de N

le programme doit me demander de:
* définir X (de type entier )
*saisir le x elements
* définir N (de type entier)
et affiche:
*les nombres des combinaisons possibles
*surtout affichée les différentes combinaisons possibles de X entier a base de N

exemple:
si X=3 ( 1 ; 3 ; 5 )
N=3
le programme affiche:

111 113 131 115 151 133 155 135 153
333 331 313 335 353 311 355 315 351
555 551 515 553 535 511 533 513 531

27 combinaisons

remarques:
*les combinaisons possibles peuvent contenir avec les combinaisons dont lequel il y a tout les X éléments d'autre combinaisons dont lequel on répète le même entier 2 fois ou 3 fois jusqu'à N fois.

* étant donner que la solution et un peut délicat dans le cas général (si il y a une solution dans le cas général avec X et N saisis au clavier sinon on fixe X=3 et je laisse N saisie au clavier et je cherche la solution de ce problème)

si quelqu'un pouvez me aider merci d'avance.
3
Salut,

je te propose un code qui devrait résoudre ton problème (la mise en forme ne ressemble peut-être pas exactement à ce que tu souhaites faire, mais ce sera facile de l'adapter). Il affiche des p-listes de n éléments où p et n sont quelconques. Bon courage.

Sinon, un algo récursif s'appelle lui-même (exemple factorielle) et admet une séquence de fin. Il n'est pas nécessaire d'utiliser la récursivité pour écrire le programme qui t'intéresse.

#include <stdio.h> // scanf et printf
#include <math.h> // pow
#include <stdlib.h> // malloc et free

int main()
{
long int *tab; // vecteur contenant les éléments à combiner
long int **liste; // matrice destinée à contenir les combinaisons
long int i,j; // indices de boucle
long int n = 3; // nombre d'éléments de tab
long int p = 3; // nombre d'éléments à combiner
char touche; // ne sert que pour la mise au point

// Allocation dynamique de tab
tab = (long int *) malloc(n*sizeof(long int));

// Allocation dynamique de liste
liste = (long int **) malloc((long int ) pow((double )n, (double )p)* sizeof(long int *));
for (i=0;i<(long int ) pow((double )n, (double )p);i++)
{
liste[i] = (long int *) malloc(p*sizeof(long int));
}

// Initialisation de tab
for (i=0;i<n;i++)
{
tab[i] = i + 1;
}

// Remplissage de la liste
for (i=0;i<(long int ) pow((double )n, (double )p);i++)
{
for (j=0;j<p;j++)
{
liste[i][j] = tab[(i/(long int )pow((double )n,(double )(p-(j+1))))%n];
printf("%ld\t",liste[i][j]);
}
printf("\n");
}

// Libération de tab
free(tab);

// libération de liste
for (i=0;i<(long int ) pow(n,p);i++)
{
free(liste[i]);
}
free(liste);

// Fin du programme
printf("Appuyez sur une touche pour continuer...");
scanf("%c",&touche);

return 0;
}

    
0