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
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.
A voir également:

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
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 :

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
0
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
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
0
Merci,
Je vous demande aimablement de me presenter l'algo de la recursivité et ça sera vraiment trés gentil de votre part. En faite, moi je ne suis q'une débutante en programmation, je sais peu de chose sur le C et la programmation!
0
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
Cela peut peut être t'aider :

http://lbasic.atomysk.com/forum/viewtopic.php?t=615

le basic est souvent plus facile à comprendre.

@++
0
Utilisateur anonyme
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.
0
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
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
0
Utilisateur anonyme
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.
0

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
Salut :
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
0
puisque le pb dans: canf et printf
tu mit a la place de scanf cin>>" ... ";
et a la place de printf cout<<" ... ";
0
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
cin et cout c'est du C++
0
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
Merci pour ton aide. Je suis trés reconaissante.
0
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
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.
0
Utilisateur anonyme
5 déc. 2005 à 05:52
MERCI pour ton aide mais je suis désolée car j'ai pas eu l'occation de voir les autre prob portant sur le même théme.
Merci encore.
0
pourkoi charsnipeur flote ,ne donne pas de solutions
0
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
allo?
mé ké ki di toua?
0
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
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)
#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.
0
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
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
[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
0
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
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)
#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 ;
            }
    }
0
Utilisateur anonyme
5 déc. 2005 à 21:21
MERCI. la solution fonctionne trés trés bien. Vraiment Bravo. Félicitation.
0
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
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
0
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
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.
0
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
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.
0
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
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.
0
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
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.
0
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
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.
0
Utilisateur anonyme
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!
0