Probleme de combinaison en C
Fermé
lamia
-
2 déc. 2005 à 21:21
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 6 déc. 2005 à 09:02
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 6 déc. 2005 à 09:02
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 Programmation
12 réponses
Sethpolma
Messages postés
66
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
8 mars 2007
15
2 déc. 2005 à 22:10
2 déc. 2005 à 22:10
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
nico7382
Messages postés
279
Date d'inscription
lundi 6 juin 2005
Statut
Membre
Dernière intervention
22 décembre 2010
50
2 déc. 2005 à 22:12
2 déc. 2005 à 22:12
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
p.legal
Messages postés
88
Date d'inscription
mardi 14 juin 2005
Statut
Membre
Dernière intervention
21 mars 2008
24
>
lamia
3 déc. 2005 à 02:56
3 déc. 2005 à 02:56
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.
@++
Utilisateur anonyme
4 déc. 2005 à 12:39
4 déc. 2005 à 12:39
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.
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
4 déc. 2005 à 13:48
4 déc. 2005 à 13:48
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
Utilisateur anonyme
4 déc. 2005 à 15:51
4 déc. 2005 à 15:51
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
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
4 déc. 2005 à 19:44
4 déc. 2005 à 19:44
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
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
>
toto
4 déc. 2005 à 21:14
4 déc. 2005 à 21:14
cin et cout c'est du C++
Utilisateur anonyme
>
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
5 déc. 2005 à 05:55
5 déc. 2005 à 05:55
Merci pour ton aide. Je suis trés reconaissante.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
4 déc. 2005 à 20:11
4 déc. 2005 à 20:11
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.
pourkoi charsnipeur flote ,ne donne pas de solutions
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
5 déc. 2005 à 13:02
5 déc. 2005 à 13:02
allo?
mé ké ki di toua?
mé ké ki di toua?
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
5 déc. 2005 à 13:45
5 déc. 2005 à 13:45
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.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 déc. 2005 à 19:25
5 déc. 2005 à 19:25
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
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
5 déc. 2005 à 20:21
5 déc. 2005 à 20:21
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 ; } }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
5 déc. 2005 à 20:45
5 déc. 2005 à 20:45
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
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
5 déc. 2005 à 21:31
5 déc. 2005 à 21:31
Effectivement tu ne fais d'allocation à la main, mais l'interpréteur perl le
fait pour toi. Chaque affectation de tableau : t1 = t2, réalloue complètement le
tableau t2 pour obtenir la copie t1.
fait pour toi. Chaque affectation de tableau : t1 = t2, réalloue complètement le
tableau t2 pour obtenir la copie t1.
Utilisateur anonyme
>
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
5 déc. 2005 à 21:37
5 déc. 2005 à 21:37
SVP. je voudrais juste te demander une axpliquation d'une chose que j'ai pas bien compris.
entree = malloc( nb * sizeof( int ) ) ;
if ( !entree )
{
perror( "malloc:" ) ;
return 1 ;
}
j'ai pas compris son fonctionnement!
Merci d'avance.
entree = malloc( nb * sizeof( int ) ) ;
if ( !entree )
{
perror( "malloc:" ) ;
return 1 ;
}
j'ai pas compris son fonctionnement!
Merci d'avance.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
5 déc. 2005 à 21:51
5 déc. 2005 à 21:51
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.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
5 déc. 2005 à 22:04
5 déc. 2005 à 22:04
En plus le script que j'ai écrit traite aussi les mots, les caractères, n'importe quoi si tu veux (qui réponds bien à peut-t-on envisager une solution générique?
Faire ça en C demande beaucoup de lignes de code.
Faire ça en C demande beaucoup de lignes de code.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
6 déc. 2005 à 09:02
6 déc. 2005 à 09:02
Salut.
Plutot que le perl, moi j'aurai utiliser le C++ et la STL.
Les conteneurs tel que vector permettent de ne pas s'occuper de l'allocation mémoire.
Plutot que le perl, moi j'aurai utiliser le C++ et la STL.
Les conteneurs tel que vector permettent de ne pas s'occuper de l'allocation mémoire.
Utilisateur anonyme
5 déc. 2005 à 21:28
5 déc. 2005 à 21:28
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!