Bonjour,
Je cherchai un programme c++ sur internet qui permettait de calculer la solution du jeu le compte est bon, j'en est finalement trouvé un, mais j'ai du mal à en comprendre le fonctionnement. Pouvez vous m'aidez svp?
ps: ce programme se compile bien et fonctionne
/* decomposer n en une operation de au plus a nombres du tableau t
*/
#include <stdio.h>
#include <string.h>
#include <conio.h>
int i;
typedef long (* fct)(long, long);
//Les 4 opérations fondamentales
long plus(long a, long b) { return a+b;}
long moins(long a, long b) { return a-b;}
long mult(long a, long b) { return (a==1 || b==1)?-10000:a*b;}
long div(long a, long b) { return (b!=0 && a%b==0)?a/b:-10000;}
fct f[]={div,mult,plus, moins};
char nom[]={'/','x','+','-'};
char res[255];
//Fonction de decomposition
long decompose(long n, long a, long *t)
{
long v[6];
char tmp[80];
int i,j,k,l,op;
if (a<=0) return 0;
if (a==1)
{
if (n==t[0])
return 1;
else
return 0;
}
for (i=0;i<a;++i)
{
if (t[i]==n)
{
printf("Sol : %ld \n",t[i]);
return 1;
}
for (j=1;j<a;++j)
{
if (j==i) continue;
for (op=0;op<4;++op)
{
if ((v[0]=f[op](t[i],t[j]))<0)
continue;
for (k=1,l=0;l<a;++l)
{
if (l==i || l==j)
continue;
v[k++]=t[l];
}
if (decompose(n,a-1,v)==1)
{
strcpy(tmp,res);
sprintf(res,"%ld = %ld %c %ld\n",
f[op](t[i],t[j]),t[i],nom[op],t[j]);
strcat(res,tmp);
return 1;
}
}
}
}
return 0;
}
long int main()
{
long int t[]={1,4,7,10,25,50}; //Un tableau à 6 chiffres qui sera ecrasé par les valeurs saisies
long int n=165;
long int d=0;
for (i=0; i<6 ; i++)
{
printf("\nRentrer le %d nombre :", i);
scanf("%d", &t[i]);
}
//La valeur à trouver : on aurait pu faire une fonction aléatoire !
printf("Donner la valeur à trouver : ");
scanf("%d", &n);
//Petit récapitutif de la saisie
printf("\n\nVoilà vos nombres rentrés :");
for (i=0; i<6 ; i++)
{
printf("%d ", t[i]);
}
printf("\nVous devez trouver : %d\n", n);
getch();
/*for (n=1;n<999;++n) {*/
strcpy(res,"");
while(!decompose(n,6,t)) { //fct principale
d=-d +( (d>0)?-1:1);
n+=d;
printf("%ld\n ",n);
}
printf("\n%ld",n);
printf("\n");
printf(res);
printf("--------------\n");
/*}*/
printf("\nFin de la recherche...");
getch();
return 0;
}