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
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
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
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.
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.
22 nov. 2009 à 00:36
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;
}