Aide pour combinaison

kritical Messages postés 9 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 3 décembre 2005 - 14 nov. 2005 à 15:12
kritical Messages postés 9 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 3 décembre 2005 - 21 nov. 2005 à 18:30
salut tout le monde
j'aimerais bien si on peut m'aide a résoudre ce probléme:
je voudrais lister toutes le combinaisons possibles de n entiers à saisir(en C++)
exp:pour 3 entier {7,3,4}:
734
374
743
437
473
347
merci d'avance.

15 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
14 nov. 2005 à 19:02
Il suffit de se débrouiller avec qq boucles (while et/ou for).

Ya rien de vraiment sorcier, faut réfléchir un peu.


YOYO, @+.
YOYO
0
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 3
14 nov. 2005 à 23:13
Tu peux effectuer une boucle for allant pour trois chiffres de 100 à 999, puis transformer chacune des valeur en chaine de caractère, étudier chacun de ces caractères pour connaitre s'ils sont équivalents aux chiffres recherchés, auquel cas, tu garde le nombre formé par ces chiffres. Tu créées en parallèle une routine pour éliminer les combinaisons contenant deux fois le même chiffre (ex 773, 337)

LaPatoshe
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
14 nov. 2005 à 23:36
Salut,

en C++, tu peux utiliser next_permutation sur ton tableau triée.

Pour une question de cours, tu peux faire tous les chemins possible en
passant par tous les points dans graphe complet, les valeurs de ton
tableau étant les noeuds de ton graphe ;)


Ma participation à la saturation du net:
http://hylvenir.free.fr
0
Lord_Patoche Messages postés 196 Date d'inscription mercredi 6 août 2003 Statut Membre Dernière intervention 1 mai 2009 3
15 nov. 2005 à 00:14
Ce Code correspond à l'idée que j'ai exposé précédemment. tu commence par choisir le nombre de chiffre puis tu les choisis un par un. Ensuite, les combinaisons diverses apparaissent. Attention, ce code ne dispose pas d'un anti doublon, ainsi, certaines combinaisons pourront ressembler à (773, 777, 337 si par exemple tu choisis les chiffres 3 et 7)

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <windows.h>



int Nb = 0;
char Chiffre[10];
char ChiffreLu[10];
char *Combinaison[10000];


long exposant(long, long);


int main()
{
printf("Combien de nombres :");
scanf("%d", &Nb);
char c = getchar();
for(int cpta = 0; cpta< Nb; cpta++)
{
printf("\nEntrez le nombre numero %d :",cpta+1);
scanf("%c", &Chiffre[cpta]);
char c = getchar();
}


int position = 0;


for (int cptb = exposant(10,Nb-1); cptb < ((exposant(10,Nb-1))*10) - 1; cptb++)
{
char *Chaine = (char*) malloc(10);
sprintf(Chaine,"%d", cptb);

//Analyse de la chaine
int Concordance = 0;


for (int cptc = 0; cptc < Nb; cptc++)
{
for(int cptd = 0; cptd < Nb; cptd++)
{
if(Chaine[cptd] == Chiffre[cptc])
{
Concordance++;
}
}
}
if(Concordance == Nb)
{
//Combinaison acceptée
Combinaison[position] = (char*) malloc(10);
lstrcpy(Combinaison[position], Chaine);
position++;
printf("\tCombinaison %d : %s", position, Combinaison[position-1]);


}
}


return 0;
}



long exposant(long Base, long e)
{
for (int cpt = 0; cpt < e-1; cpt ++)
{
Base *= 10;
}
return Base;
}

LaPatoshe
0

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

Posez votre question
kritical Messages postés 9 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 3 décembre 2005
15 nov. 2005 à 12:59
merci mais j'ai juste besoin d'afficher pour 3 nombres les 6 combinaisons:
exp pour 3:{1,2,3}:
123
132
231
213
321
312
comment on fait un anti doublon?
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
15 nov. 2005 à 14:40
#include <stdio.h>

#include <stdlib.h>



#define ARRAY_SIZE(x) sizeof(x) / sizeof(x[0])



void Permutation(int *Tab, int Size)

{

int *Entier = ( int* )malloc(Size); //On alloue un tableau de la même taille que Tab



//Le premier élément est le dernier de Tab

Entier[0] = Tab[Size-1];



//On remplie le tableau Entier avec les prédécesseur de Tab

for(int i= 1; i<Size; i++)

Entier[i] = Tab[i-1];



//Et on change les valeur de Tab

for (int j =0; j<Size; j++)

Tab[j] = Entier[j];



//On libère la mémoire allouée

free(Entier);

}



//Calcul de la factorielle pour savoir combien de combinaison possible

int Factorielle(int n)

{

if(n 2) //Si n 2, alors on retourne 2 car inutile d'aller plus loin

return 2;

else //Sinon

return n*Factorielle(n-1); //On retourne n*Factorielle(n-1)

}



int main()

{

int TabEntier[3] = {1,2,3};

int Count = 0, i=0, Two=1;



//Tant que Count est inférieur à la moitié des possibilités

while (Count < (Factorielle(3)/2))

{

if(Two == 2) //Si on est passé 2 fois par la boucle

{

//On fait une permutation Circulaire à droite du tableau

Permutation(TabEntier, ARRAY_SIZE(TabEntier));

Two = 1; //Et on réinitialise

}



//On affiche les valeurs

printf("%i%i%i\n", TabEntier[0], TabEntier[1], TabEntier[2]);

printf("%i%i%i\n", TabEntier[0], TabEntier[2], TabEntier[1]);



//Et on incrémente

Two++;

Count++;

}



system("pause");

}


Vala pour moi c'est la solution lol :)
if(!Meilleur("Joky")) return ERREUR;
0
ekinox17 Messages postés 66 Date d'inscription jeudi 6 octobre 2005 Statut Membre Dernière intervention 18 janvier 2006
15 nov. 2005 à 15:46
Ouah et ben moi qui voulait me lancer dans ce problemes car il
paraisser plutot difficile ... glups et toi tu l'as fait comment sa et
bien moi je dit chapeau monsieur...
0
kritical Messages postés 9 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 3 décembre 2005
15 nov. 2005 à 16:06
mais je veux le faire pour n entiers(<10) à saisir un par un
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
15 nov. 2005 à 17:24
exactement le même post le 08/11...
peut-être le même cours en alternance :)
http://www.cppfrance.com/forum.v2.aspx?ID=595741
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
15 nov. 2005 à 21:49
J'ai pas le temps ce soir mais bon...

Il suffit de changer NB_VAL avec la taille souhaitée.

J'ai donc pas le temps de faire mieux.





#include <stdio.h>



#define NB_VAL 3



int array[NB_VAL] = { 0 };

int num = 0;



void display()

{

int i;

for ( i = 0; i < NB_VAL; ++i )

printf( "%d ", array[i] );

printf("\n" );

}



void permutation( int index )

{

int i;

array[++index] = ++num;

if ( num == NB_VAL ) display();

for ( i = 0; i < NB_VAL; ++i )

if ( !array[i] )

permutation( i-1 );

array[index] = 0;

--num;

}



int main()

{

int i;

for ( i = -1; i < NB_VAL-1; ++i )

permutation( i );

}
0
kritical Messages postés 9 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 3 décembre 2005
20 nov. 2005 à 17:00
merci pour l'aide les gars
0
hatemvbb Messages postés 1 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 20 novembre 2005
20 nov. 2005 à 22:14
Salut a tous,moi aussi je suis dans la meme galere.j'apprecie l'algorithme que t'as propose hylvenir,mais ce que je voudrais c'est un programme qui permet de saisr n entiers et ensuite de faire les permutaions.
ex:
saisir 3 entiers : 1,2,3
voici les permutations : 1-2-3,1-3-2,2-3-1,2-1-3,3-2-1,3-1-2.
merci d'avance.

p.s : je suis vraiment bloqué.
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
20 nov. 2005 à 22:22
Salut,
je ne suis pas censé faire les devoirs, et c'était une erreur de ma part
de proposer une solution complête.
Normalement, ce site n'est pas fait pour ça, mais apporter une aide
(enfin peut être que les admins me contrediront),
il faudrait que tu montres ce que tu as essayé de faire pour voir le problème
et voir ensuite où peut se trouver ton problème.

Sinon, si tu as compris mon code et comment il fonctionne, tu dois
facilement pouvoir le modifier pour arriver à résoudre ton problème.

Ma participation à la saturation du net:
http://hylvenir.free.fr
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
20 nov. 2005 à 22:57
Lol non les admins ne te contrediront pas :)

Je pense que Cppfrance doit avoir des partenaires scolaires lol :)

Et c'est vrai que c'est assez chiant tous ces gens qui n'ont même pas
le courage d'essayer de chercher et d'opter pour une solution de
facilité :s

Surtout qu'adapter le code d'Hylvenir à ton problème n'a vraiment rien de problématique :S



Enfin bref, tel est la jeunesse :)
if(!Meilleur("Joky")) return ERREUR;
0
kritical Messages postés 9 Date d'inscription lundi 24 octobre 2005 Statut Membre Dernière intervention 3 décembre 2005
21 nov. 2005 à 18:30
moi j'ai trouvé la solution pour n entiers(avec un autre code)
et je suis entrain d'améliorer mon program avec un affichage en fenétre...
je filerais le code dés que j'aurais términé.
0
Rejoignez-nous