1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#include <stdio.h>
int nb_de_possibilite=0;
//simple fonction qui affiche le tableau et passe a la ligne
void afftab(int * tab, int taille)
{
int i ;
for(i=0;i<=taille-1;i++) printf("%d;", tab[i]) ;
printf("\n");
}
//m est le nombre d'elements du tableau
//somme est la somme des elements
int partition(int * tab, int somme, int index, int m, int s)
{
int i, total=0 ;
if(s==0)
{
for(i=0;i<=m;i++) tab[i]=0 ;
afftab(tab, m);
}
else if(index==m)
{
tab[m]=s ;
for(i=0;i<=m-1;i++) total+=tab[i] ;
if(total==s) { afftab(tab, m); nb_de_possibilite++;}
}
else
{
for(i=0;i<=somme;i++)
{
if(somme>=i)
{
tab[index]=i;
partition(tab, somme-i, index+1, m, s);
}
}
}
}
int main(void)
{
int tab[32], i;
int somme, nb;
for(i=0;i<=31;i++) tab[i]=0 ;
printf("Entrer la somme des elements : ") ;
scanf("%d", &somme);
printf("Entrer le nombre d'elements (max 32) : ") ;
scanf("%d", &nb);
partition(tab, somme, 0, nb, somme) ;
printf("Nombre de solutions possibles : %d\n", nb_de_possibilite) ;
return 0;
} |
Partager