Probleme de combinaison en C
lamia
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
c'est un programme en language C que je ne trouve pas sa résolution.
ENONCE:
1.écrire un programme en c qui permet de determier les combinaisons possibles à partir d'un ensemble de 3 valeurs entiéres données.
exemple d'exécution:
donner la 1ére valeur : 3
donner la 2éme valeur : 1
donner la 3éme valeur : 5
voici la liste des combinaisons
135-153-315-351-513-531
2.etendre le programme pour qu'il traite 4 valeurs puis 5 puis 6,7,8 et 9 valeurs
3.peut-t-on envisager une solution générique? càd qui permet de traiter N valeurs.
par exemple comme suit:
donner le nombre de valeurs:4
donner la 1ére valeur : 2
donner la 2éme valeur : 4
donner la 3éme valeur : 6
donner la 4éme valeur : 8
voici la liste des combinaisons:
2468-2486-2648-2684-2846-2864
4268-4286-4628-4682-4826-4862
6248-6284-6428-6482-6824-6842
8246-8264-8462-8426-8642-8624
MERCI.
ENONCE:
1.écrire un programme en c qui permet de determier les combinaisons possibles à partir d'un ensemble de 3 valeurs entiéres données.
exemple d'exécution:
donner la 1ére valeur : 3
donner la 2éme valeur : 1
donner la 3éme valeur : 5
voici la liste des combinaisons
135-153-315-351-513-531
2.etendre le programme pour qu'il traite 4 valeurs puis 5 puis 6,7,8 et 9 valeurs
3.peut-t-on envisager une solution générique? càd qui permet de traiter N valeurs.
par exemple comme suit:
donner le nombre de valeurs:4
donner la 1ére valeur : 2
donner la 2éme valeur : 4
donner la 3éme valeur : 6
donner la 4éme valeur : 8
voici la liste des combinaisons:
2468-2486-2648-2684-2846-2864
4268-4286-4628-4682-4826-4862
6248-6284-6428-6482-6824-6842
8246-8264-8462-8426-8642-8624
MERCI.
A voir également:
- Écrire une fonction qui affiche, dans l’ordre croissant, toutes les différentes combinaisons de trois chiffres différents dans l’ordre croissant - oui, la répétition est volontaire.
- Excel trier par ordre croissant chiffre - Guide
- Fonction si et - Guide
- Application pour écrire les chiffre en lettre - Télécharger - Outils professionnels
- Toutes les combinaisons possibles avec 3 chiffres - Forum Réseaux sociaux
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum LibreOffice / OpenOffice
12 réponses
Je pense qu'une solution serait de mettre tes n valeurs dans un tableau, et ensuite de parcourir ce tableau avec n compteurs différents. Par exemple, avec trois variables :
Cette technique est difficilement généralisable jusqu'à n. Mais, en même temps, je ne vois pas très bien comment faire. Ceci dit, je ne suis qu'un porgrammeur amateur ! :D
Array[0] = 1; Array[1] = 2; Array[2] = 3; for( char i=0 ; i++ ; i==n ) { for( char j=0 ; j++ ; j==n ) { if( j!=i) { for( char k=0 ; k++ ; k==n) { if( (k!=j) && (k!=i) ) { cout >> Array[i]; cout >> Array[j]; cout >> Array[k]; } } } } }
Cette technique est difficilement généralisable jusqu'à n. Mais, en même temps, je ne vois pas très bien comment faire. Ceci dit, je ne suis qu'un porgrammeur amateur ! :D
Salut
Je pense que la solution est de la traiter de maniere recursive, ca fait trop longtemps que j'ai pas fait de C, pour te donner la solution.
Mais la recursivité est une solution
Je pense que la solution est de la traiter de maniere recursive, ca fait trop longtemps que j'ai pas fait de C, pour te donner la solution.
Mais la recursivité est une solution
Cela peut peut être t'aider :
http://lbasic.atomysk.com/forum/viewtopic.php?t=615
le basic est souvent plus facile à comprendre.
@++
http://lbasic.atomysk.com/forum/viewtopic.php?t=615
le basic est souvent plus facile à comprendre.
@++
voilà j'ai trouvé cette maniére de faire mais je voudrais l'améliorer pour qu'il me demande le nb de chiffres et puis me demande de choisir les chiffres que je veux.
VOICI LE PROG:
#include <stdio.h>
#define NB_VAL 3 /*Il suffit de changer NB_VAL avec la taille souhaitée.*/
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 );
}
A l'execution il me donne:(pour NB_VAL=3)
1 2 3
1 3 2
2 1 3
3 1 2
2 3 1
3 2 1
le choix des chiffres à combiner se fais d'une maniére ordonné:
pour NB_VAL=3 les chiffres sont 1,2,3
pour NB_VAL=4 les chiffres sont 1,2,3,4
ainsi de suite.
svp aider moi.
VOICI LE PROG:
#include <stdio.h>
#define NB_VAL 3 /*Il suffit de changer NB_VAL avec la taille souhaitée.*/
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 );
}
A l'execution il me donne:(pour NB_VAL=3)
1 2 3
1 3 2
2 1 3
3 1 2
2 3 1
3 2 1
le choix des chiffres à combiner se fais d'une maniére ordonné:
pour NB_VAL=3 les chiffres sont 1,2,3
pour NB_VAL=4 les chiffres sont 1,2,3,4
ainsi de suite.
svp aider moi.
Salut,
Vas faire un tour sur ce topic :
http://www.commentcamarche.net/forum/affich-1956028-probleme-en-c
J'ai posté l'algo.
Pour ton problème de saisie, tu demandes le nombre d'élément, tu alloues le
tableau de valeur et tu saisie les valeurs dans ton main. (utilisation de scanf)
Ensuite tu appelles la fonction de permutation.
A+, crabs
Vas faire un tour sur ce topic :
http://www.commentcamarche.net/forum/affich-1956028-probleme-en-c
J'ai posté l'algo.
Pour ton problème de saisie, tu demandes le nombre d'élément, tu alloues le
tableau de valeur et tu saisie les valeurs dans ton main. (utilisation de scanf)
Ensuite tu appelles la fonction de permutation.
A+, crabs
SVP je ne sais pas se qui cloche avec celui là pourriez vous m'aider?
#include <stdio.h>
int array[100] = { 0 };
int num,i = 0,NB_VAL;
void permutation( int index )
{
int i;
array[++index] = ++num;
if ( num == NB_VAL )
for ( i = 0; i < NB_VAL; ++i )
if ( !array[i] )
permutation( i-1 );
array[index] = 0;
--num;
}
int main()
{
int i,NB_VAL;
printf ("introduire NB_VAL");
scanf ("%i",&NB_VAL);
for (i=0;i<NB_VAL;i++)
{
printf ("introduire le %i entier",i+1);
scanf("%i",array[i]);
}
for ( i = -1; i < NB_VAL-1; ++i )
permutation( i );
}
merci.
#include <stdio.h>
int array[100] = { 0 };
int num,i = 0,NB_VAL;
void permutation( int index )
{
int i;
array[++index] = ++num;
if ( num == NB_VAL )
for ( i = 0; i < NB_VAL; ++i )
if ( !array[i] )
permutation( i-1 );
array[index] = 0;
--num;
}
int main()
{
int i,NB_VAL;
printf ("introduire NB_VAL");
scanf ("%i",&NB_VAL);
for (i=0;i<NB_VAL;i++)
{
printf ("introduire le %i entier",i+1);
scanf("%i",array[i]);
}
for ( i = -1; i < NB_VAL-1; ++i )
permutation( i );
}
merci.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut :
problème au niveau des fonctions de lecture :
Le %i fonctionne aussi, mais il faut le réserver si on veut donner la
possibilité de saisir des nombres en hexa ou octal.
Pour le scanf dans la boucle, il faut fournir un pointeur sur int.
Pour faire propre, testes si NB_VAL est inférieur à 100.
Ensuite la fonction de permutation fait des affectations :
Donc tu perdras les valeurs saisies.
A+, crabs
problème au niveau des fonctions de lecture :
scanf( "%d", &NB_VAL ); scanf( "%d", &(array[i]) ); ou scanf( "%d", array+i ) ;
Le %i fonctionne aussi, mais il faut le réserver si on veut donner la
possibilité de saisir des nombres en hexa ou octal.
Pour le scanf dans la boucle, il faut fournir un pointeur sur int.
Pour faire propre, testes si NB_VAL est inférieur à 100.
Ensuite la fonction de permutation fait des affectations :
array[++index] = ++num;
Donc tu perdras les valeurs saisies.
A+, crabs
Salut.
voir aussi :
http://www.commentcamarche.net/forum/affich-1945503-%5BC-%5D-programme
pour l'algo.
C'est au moins le troisième post que je voi avec la même question et le même exemple.
voir aussi :
http://www.commentcamarche.net/forum/affich-1945503-%5BC-%5D-programme
pour l'algo.
C'est au moins le troisième post que je voi avec la même question et le même exemple.
voici mon algo ecri en partie. Il compil, mais je ne l'ai pas vérifier. Il reste à changer les new en malloc je croi. Et à allouer les pointeurs que je n'ai pas allouer. L'interet par rapport à ce qui est écri, c'est que les infos sont enregistrés.(peu être pas utile dans toncas)
EDIT : Oups, il manque qqch dans la boucle avec le insert. Donc à modifier aussi l'insertion.
#include <stdio.h> short **ar; int nb_val,nb_ar; short** permutation(int*,int); int fact(int); int main() { scanf("%d",&nb_val); nb_ar=fact(nb_val); ar=new short*[nb_ar]; int val[nb_val]; for(short i=0;i<nb_val;i++) scanf("%d",(val+nb_val)); ar=permutation(val,nb_val); } int fact (int n){if(n==0)return 1;else return n*fact(n-1);} void insert(short**,short**,int,int,int,int); short** permutation(int* val,int nb_val) { short **arn,**ar; if(nb_val==2) {arn[0][0]=arn[1][1]=val[0];arn[0][1]=arn[1][0]=val[1];return arn;} int val0=val[0];int *valn; for(int i=0;i<nb_val-1;i++)valn[i]=val[i+1]; arn=permutation(valn,nb_val-1); int k=0; for(int i=0;i<fact(nb_val-1);i++) { insert(ar,arn,val0,i,k,nb_val); k++; } return ar; } void insert(short**ar,short**arn,int val0,int i,int k,int nb) { for(int j=0;j<nb-1;j++) { if(j<i) ar[k][j]=arn[i][j]; if(j==i) ar[k][j]=val0; if(j>i) ar[k][j+1]=arn[i][j]; } }
EDIT : Oups, il manque qqch dans la boucle avec le insert. Donc à modifier aussi l'insertion.
Bonsoir,
je vous propose une version en Perl pour cette situation.
Ce script trouve la combinaison des caractères, nombres, chiffres (0 à 9), mots.
Je n'ai pas travailler sur les doublons, triplons,....(on peux le faire)
Donc pour 3 termes 1 1 1 on auras 6 combinaisons
111
.
.
111
Il demande au début le nombre des valeurs. Si on fait entrez c'est 3 par défaut.
J'ai ajouté un fonction factorial qui calcule le nombre des possibilitées. Donc attention pour les long chaînes.
Sur le pc que j'ai testé le factoriel j'ai eu comme résultat
Le script et à la fin quelques testes avec 1 2 3, 11 12 13, a b c, lamia86 Char Snipeur lami20j.
Exemples:
avec 1 2 3
avec 11 12 13
avec a b c
avec lamia86 Char Snipeur lami20j
lami20j
je vous propose une version en Perl pour cette situation.
Ce script trouve la combinaison des caractères, nombres, chiffres (0 à 9), mots.
Je n'ai pas travailler sur les doublons, triplons,....(on peux le faire)
Donc pour 3 termes 1 1 1 on auras 6 combinaisons
111
.
.
111
Il demande au début le nombre des valeurs. Si on fait entrez c'est 3 par défaut.
J'ai ajouté un fonction factorial qui calcule le nombre des possibilitées. Donc attention pour les long chaînes.
Sur le pc que j'ai testé le factoriel j'ai eu comme résultat
[lamitest@localhost my_perl_script]$ perl factoriel.pl Entrez un nombre entier, 2 par défaut: 170 170! = 1 * 2 * 3 * ..... * 168 * 169 * 170 = 7.25741561530799e+306. [lamitest@localhost my_perl_script]$ perl factoriel.pl Entrez un nombre entier, 2 par défaut: 171 171! = 1 * 2 * 3 * ......* 168 * 169 * 170 * 171 = inf. [lamitest@localhost my_perl_script]$
Le script et à la fin quelques testes avec 1 2 3, 11 12 13, a b c, lamia86 Char Snipeur lami20j.
#! /usr/bin/perl -w use strict; my @nb; $"="-"; # variable spéciale Perl - quoi mettre entre les éléments d'un tableau # quand le tableau est interpolé. Par défaut c'est espace # On saisi le nombre N, par défaut 3 print "Donnez le nombre de chiffres, nombres, caractères, mots, que vous voulez permuter [3 par défaut] : "; chomp(my $nombre=<STDIN>); $nombre ||= 3; my $compteur=1; while ($compteur <= $nombre){ print "Entrez l'élément $compteur : "; chomp(my $nb=<STDIN>); push @nb,$nb; # stocker les nombres dans un tableau $compteur++; } sub factorial{# calculer le nombre des possibilités - peut être exclus du script my $factorial=1; foreach(1..$_[0]){ $factorial *= $_ } return $factorial; } print "Le nombre des combinaisons possible : ",factorial($nombre),"\n"; # c'est ici la fonction qui calcule les combinaisons # la partie qui calcule le nombre des combinaisons on n'a pas besoin sub permutation { my @chaine = @{ $_[0] }; my @permuter = @{ $_[1] }; unless (@chaine) { print "@permuter\n"; }else{ my (@chaine_, @permuter_, $i); foreach $i (0..$#chaine){ @chaine_ = @chaine; @permuter_ = @permuter ; unshift (@permuter_, splice(@chaine_,$i,1)); permutation ( [@chaine_], [@permuter_]) ; } } } permutation ([@nb], []);
Exemples:
avec 1 2 3
[lamitest@localhost my_perl_script]$ perl permutation.pl Donnez le nombre de chiffres, nombres, caractères, mots, que vous voules permuter [3 par défaut] : Entrez le nombre 1 : 1 Entrez le nombre 2 : 2 Entrez le nombre 3 : 3 Le nombre des combinaisons possible : 6 3-2-1 2-3-1 3-1-2 1-3-2 2-1-3 1-2-3 [lamitest@localhost my_perl_script]$
avec 11 12 13
[lamitest@localhost my_perl_script]$ perl permutation.pl Donnez le nombre de chiffres, nombres, caractères, mots, que vous voules permuter [3 par défaut] : Entrez le nombre 1 : 11 Entrez le nombre 2 : 12 Entrez le nombre 3 : 13 Le nombre des combinaisons possible : 6 13-12-11 12-13-11 13-11-12 11-13-12 12-11-13 11-12-13 [lamitest@localhost my_perl_script]$
avec a b c
[lamitest@localhost my_perl_script]$ perl permutation.pl Donnez le nombre de chiffres, nombres, caractères, mots, que vous voules permuter [3 par défaut] : Entrez le nombre 1 : a Entrez le nombre 2 : b Entrez le nombre 3 : c Le nombre des combinaisons possible : 6 c-b-a b-c-a c-a-b a-c-b b-a-c a-b-c [lamitest@localhost my_perl_script]$
avec lamia86 Char Snipeur lami20j
[lamitest@localhost my_perl_script]$ perl permutation.pl Donnez le nombre de chiffres, nombres, caractères, mots, que vous voules permuter [3 par défaut] : Entrez le nombre 1 : lamia86 Entrez le nombre 2 : Char Snipeur Entrez le nombre 3 : lami20j Le nombre des combinaisons possible : 6 lami20j-Char Snipeur-lamia86 Char Snipeur-lami20j-lamia86 lami20j-lamia86-Char Snipeur lamia86-lami20j-Char Snipeur Char Snipeur-lamia86-lami20j lamia86-Char Snipeur-lami20j [lamitest@localhost my_perl_script]$
lami20j
salut à tous,
Je fournis le code C de ce problème qui présente un certain avantage : pas de
mémoire allouée pour des tableaux intermédiaire de traitement.
Compilé et testé sous Linux (noyau 2.4.29, libc 2.3.4 et gcc 3.3.4)
Je fournis le code C de ce problème qui présente un certain avantage : pas de
mémoire allouée pour des tableaux intermédiaire de traitement.
Compilé et testé sous Linux (noyau 2.4.29, libc 2.3.4 et gcc 3.3.4)
#include <stdio.h> #include <stdlib.h> void permutation( int* e, int nb, int rang ) ; int main( int argc, char** argv ) { int nb ; /* Le nombre d'entier à permuter */ int * entree ; /* Le tableau qui contiendra les nombres */ int i ; printf( "Nb d'entier : " ) ; fflush(stdin) ; fflush( stdout ) ; scanf( "%d", &nb ) ; entree = malloc( nb * sizeof( int ) ) ; if ( !entree ) { perror( "malloc:" ) ; return 1 ; } for( i=0; i<nb; i++ ) { printf( "Entier %d : ", i+1 ) ; fflush(stdin) ; fflush( stdout ) ; scanf( "%d", entree+i ) ; } permutation( entree, nb, 0 ) ; free( entree ) ; return 0 ; } void permutation( int* e, int nb, int rang ) { int i, j ; if ( rang == nb-1 ) /* Le zone à permutter ne contient qu'un élément */ { char* sep = "" ; for( i=0; i<nb; i++ ) { printf( "%s%d", sep, e[i] ) ; sep = ", " ; } printf( "\n" ) ; } else for( i=rang; i<nb; i++ ) { int prem ; permutation( e, nb, rang+1 ) ; /* on fait tourner les éléments de la zone à permutter */ prem = e[rang] ; for( j=rang+1; j<nb; j++ ) e[j-1] = e[j] ; e[nb-1] = prem ; } }
Re,
Les avantages?!
J'ai oublié de vous dire. Pas besoin du tout d'allocation de la mémoire (ni pour le tableau initial ni pour les tableaux intermédiaires, ni pour quoi que ce soit) avec Perl.
Mais la solution a été demandée en C. Donc félicitations.
lami20j
Les avantages?!
J'ai oublié de vous dire. Pas besoin du tout d'allocation de la mémoire (ni pour le tableau initial ni pour les tableaux intermédiaires, ni pour quoi que ce soit) avec Perl.
Mais la solution a été demandée en C. Donc félicitations.
lami20j
Re,
Effectivement tu ne fais d'allocation à la main,
Tout à fait. C'est ça que je voulais dire. En C on écrit beaucoup des lignes et on se casse souvent la tête pour allouée dynamiquement la mémoire. En Perl c'est lui qui fait le menage.
Je pense que surtout pour les chaînes de caractères Perl est plus adapté que C.
Mais comme j'ai déjà dit, la solution a été demandé en C. Quand j'aurai besoin en C peut être je vais utiliser ton code, je suis un paresseux.
Effectivement tu ne fais d'allocation à la main,
Tout à fait. C'est ça que je voulais dire. En C on écrit beaucoup des lignes et on se casse souvent la tête pour allouée dynamiquement la mémoire. En Perl c'est lui qui fait le menage.
Je pense que surtout pour les chaînes de caractères Perl est plus adapté que C.
Mais comme j'ai déjà dit, la solution a été demandé en C. Quand j'aurai besoin en C peut être je vais utiliser ton code, je suis un paresseux.
voila j'ai voulu faire autre chose sans avoir recour aux fonctions. mais cela n'est pas vraiment une solution générique. Ce que j'ai eu est:
POUR N=3
/*programme à 3 chiffres*/
#include <stdio.h>
void main()
{
int a,b,c,i,f=1,X,x;
int T[3];
printf ("n = 3\n");
printf ("donner un premier entier ");
scanf("%i",&a);
printf ("donner un deuxiéme entier ");
scanf("%i",&b);
printf ("donner un troisieme entier ");
scanf("%i",&c);
for (i=1;i<=3;i++)
f=f*i;
printf ("le nb de combinaisons possibles est %i\n",f);
printf ("voici la liste des combinaisons:\n");
for (i=1;i<=3;i++)
{
x=a;
a=b;
b=c;
c=x;
T[0]=a;
T[1]=b;
T[2]=c;
printf(" %i %i %i -",T[0],T[1],T[2]);
T[0]=a;
X=T[1];
T[1]=T[2];
T[2]=X;
printf(" %i %i %i -",T[0],T[1],T[2]);
}
printf("\n");
}
POUR N=4
/*programme à 4 chiffres*/
#include <stdio.h>
void main()
{
int a,b,c,d,y,i,j,f=1,z,x;
int T[3];
printf ("n = 4\n");
printf ("donner un premier entier ");
scanf("%i",&a);
printf ("donner un deuxiéme entier ");
scanf("%i",&b);
printf ("donner un troisieme entier ");
scanf("%i",&c);
printf ("donner un quatrieme entier ");
scanf("%i",&d);
for (i=1;i<=4;i++)
f=f*i;
printf ("le nb de combinaisons possibles est %i\n",f);
printf ("voici la liste des combinaisons:\n");
for (j=1;j<5;j++)
{
y=a;
a=b;
b=c;
c=d;
d=y;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
for (i=1;i<=3;i++)
{
x=b;
b=c;
c=d;
d=x;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
printf(" %i %i %i %i -",T[0],T[1],T[2],T[3]);
T[0]=a;
T[1]=b;
z=T[2];
T[2]=T[3];
T[3]=z;
printf(" %i %i %i %i -",T[0],T[1],T[2],T[3]);
}
}
printf("\n");
}
POUR N=5
/*programme à 5 chiffres*/
#include <stdio.h>
void main()
{
int a,b,c,d,e,y,i,j,k,f=1,z,x,t;
int T[4];
printf ("n = 5\n");
printf ("donner un premier entier ");
scanf("%i",&a);
printf ("donner un deuxiéme entier ");
scanf("%i",&b);
printf ("donner un troisieme entier ");
scanf("%i",&c);
printf ("donner un quatrieme entier ");
scanf("%i",&d);
printf ("donner un cinquieme entier ");
scanf("%i",&e);
for (i=1;i<=5;i++)
f=f*i;
printf ("le nb de combinaisons possibles est %i\n",f);
printf ("voici la liste des combinaisons:\n");
for (k=1;k<=5;k++)
{
t=a;
a=b;
b=c;
c=d;
d=e;
e=t;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
for (j=1;j<=4;j++)
{
y=b;
b=c;
c=d;
d=e;
e=y;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
for (i=1;i<=3;i++)
{
x=c;
c=d;
d=e;
e=x;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
printf(" %i %i %i %i %i -",T[0],T[1],T[2],T[3],T[4]);
T[0]=a;
T[1]=b;
T[2]=c;
z=T[3];
T[3]=T[4];
T[4]=z;
printf(" %i %i %i %i %i -",T[0],T[1],T[2],T[3],T[4]);
}
}
printf("\n");
}
printf("\n");
}
POUR N=6
/*programme à 6 chiffres*/
#include <stdio.h>
void main()
{
int a,b,c,d,e,f,y,i,j,k,l,fac=1,z,x,t,r;
int T[5];
printf ("n = 6\n");
printf ("donner un premier entier ");
scanf("%i",&a);
printf ("donner un deuxiéme entier ");
scanf("%i",&b);
printf ("donner un troisieme entier ");
scanf("%i",&c);
printf ("donner un quatrieme entier ");
scanf("%i",&d);
printf ("donner un cinquieme entier ");
scanf("%i",&e);
printf ("donner un sixieme entier ");
scanf("%i",&f);
for (i=1;i<=6;i++)
fac=fac*i;
printf ("le nb de combinaisons possibles est %i\n",fac);
printf ("voici la liste des combinaisons:\n");
for (l=1;l<=6;l++)
{
r=a;
a=b;
b=c;
c=d;
d=e;
e=f;
f=r;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
T[5]=f;
for (k=1;k<=5;k++)
{
t=b;
b=c;
c=d;
d=e;
e=f;
f=t;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
T[5]=f;
for (j=1;j<=4;j++)
{
y=c;
c=d;
d=e;
e=f;
f=y;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
T[5]=f;
for (i=1;i<=3;i++)
{
x=d;
d=e;
e=f;
f=x;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
T[5]=f;
printf(" %i %i %i %i %i %i -",T[0],T[1],T[2],T[3],T[4],T[5]);
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
z=T[4];
T[4]=T[5];
T[5]=z;
printf(" %i %i %i %i %i %i -",T[0],T[1],T[2],T[3],T[4],T[5]);
}
}
printf("\n");
}
printf("\n");
}
printf("\n");
}
Et ainsi de suite pour les autre valeurs! J'ai voulu etendre mon prog pour une valeur N donnée mais avec cette methode j'ai pas pu généraliser!
POUR N=3
/*programme à 3 chiffres*/
#include <stdio.h>
void main()
{
int a,b,c,i,f=1,X,x;
int T[3];
printf ("n = 3\n");
printf ("donner un premier entier ");
scanf("%i",&a);
printf ("donner un deuxiéme entier ");
scanf("%i",&b);
printf ("donner un troisieme entier ");
scanf("%i",&c);
for (i=1;i<=3;i++)
f=f*i;
printf ("le nb de combinaisons possibles est %i\n",f);
printf ("voici la liste des combinaisons:\n");
for (i=1;i<=3;i++)
{
x=a;
a=b;
b=c;
c=x;
T[0]=a;
T[1]=b;
T[2]=c;
printf(" %i %i %i -",T[0],T[1],T[2]);
T[0]=a;
X=T[1];
T[1]=T[2];
T[2]=X;
printf(" %i %i %i -",T[0],T[1],T[2]);
}
printf("\n");
}
POUR N=4
/*programme à 4 chiffres*/
#include <stdio.h>
void main()
{
int a,b,c,d,y,i,j,f=1,z,x;
int T[3];
printf ("n = 4\n");
printf ("donner un premier entier ");
scanf("%i",&a);
printf ("donner un deuxiéme entier ");
scanf("%i",&b);
printf ("donner un troisieme entier ");
scanf("%i",&c);
printf ("donner un quatrieme entier ");
scanf("%i",&d);
for (i=1;i<=4;i++)
f=f*i;
printf ("le nb de combinaisons possibles est %i\n",f);
printf ("voici la liste des combinaisons:\n");
for (j=1;j<5;j++)
{
y=a;
a=b;
b=c;
c=d;
d=y;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
for (i=1;i<=3;i++)
{
x=b;
b=c;
c=d;
d=x;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
printf(" %i %i %i %i -",T[0],T[1],T[2],T[3]);
T[0]=a;
T[1]=b;
z=T[2];
T[2]=T[3];
T[3]=z;
printf(" %i %i %i %i -",T[0],T[1],T[2],T[3]);
}
}
printf("\n");
}
POUR N=5
/*programme à 5 chiffres*/
#include <stdio.h>
void main()
{
int a,b,c,d,e,y,i,j,k,f=1,z,x,t;
int T[4];
printf ("n = 5\n");
printf ("donner un premier entier ");
scanf("%i",&a);
printf ("donner un deuxiéme entier ");
scanf("%i",&b);
printf ("donner un troisieme entier ");
scanf("%i",&c);
printf ("donner un quatrieme entier ");
scanf("%i",&d);
printf ("donner un cinquieme entier ");
scanf("%i",&e);
for (i=1;i<=5;i++)
f=f*i;
printf ("le nb de combinaisons possibles est %i\n",f);
printf ("voici la liste des combinaisons:\n");
for (k=1;k<=5;k++)
{
t=a;
a=b;
b=c;
c=d;
d=e;
e=t;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
for (j=1;j<=4;j++)
{
y=b;
b=c;
c=d;
d=e;
e=y;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
for (i=1;i<=3;i++)
{
x=c;
c=d;
d=e;
e=x;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
printf(" %i %i %i %i %i -",T[0],T[1],T[2],T[3],T[4]);
T[0]=a;
T[1]=b;
T[2]=c;
z=T[3];
T[3]=T[4];
T[4]=z;
printf(" %i %i %i %i %i -",T[0],T[1],T[2],T[3],T[4]);
}
}
printf("\n");
}
printf("\n");
}
POUR N=6
/*programme à 6 chiffres*/
#include <stdio.h>
void main()
{
int a,b,c,d,e,f,y,i,j,k,l,fac=1,z,x,t,r;
int T[5];
printf ("n = 6\n");
printf ("donner un premier entier ");
scanf("%i",&a);
printf ("donner un deuxiéme entier ");
scanf("%i",&b);
printf ("donner un troisieme entier ");
scanf("%i",&c);
printf ("donner un quatrieme entier ");
scanf("%i",&d);
printf ("donner un cinquieme entier ");
scanf("%i",&e);
printf ("donner un sixieme entier ");
scanf("%i",&f);
for (i=1;i<=6;i++)
fac=fac*i;
printf ("le nb de combinaisons possibles est %i\n",fac);
printf ("voici la liste des combinaisons:\n");
for (l=1;l<=6;l++)
{
r=a;
a=b;
b=c;
c=d;
d=e;
e=f;
f=r;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
T[5]=f;
for (k=1;k<=5;k++)
{
t=b;
b=c;
c=d;
d=e;
e=f;
f=t;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
T[5]=f;
for (j=1;j<=4;j++)
{
y=c;
c=d;
d=e;
e=f;
f=y;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
T[5]=f;
for (i=1;i<=3;i++)
{
x=d;
d=e;
e=f;
f=x;
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
T[4]=e;
T[5]=f;
printf(" %i %i %i %i %i %i -",T[0],T[1],T[2],T[3],T[4],T[5]);
T[0]=a;
T[1]=b;
T[2]=c;
T[3]=d;
z=T[4];
T[4]=T[5];
T[5]=z;
printf(" %i %i %i %i %i %i -",T[0],T[1],T[2],T[3],T[4],T[5]);
}
}
printf("\n");
}
printf("\n");
}
printf("\n");
}
Et ainsi de suite pour les autre valeurs! J'ai voulu etendre mon prog pour une valeur N donnée mais avec cette methode j'ai pas pu généraliser!