Algo affichage combinaison de p elemt parmi n

brah -  
manandpc Messages postés 1 Statut Membre -
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
Configuration: Windows XP
Firefox 2.0.0.11

9 réponses

  1. star.ahmed35 Messages postés 6 Date d'inscription   Statut Membre 3
     
    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
    1. proto
       
      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