fatal_error a écrit:hello,
c'est dommage, on avait eu un code de Le_jeu qui utilisait la notation infixe pour résoudre ce problème. Mais il semblerait que la discussion soit paumée
tjs est-il que tu peux chercher sur le net "le compte est bon" ou des chiffres et des lettres si tu es en manque d'inspiration.
Salut,
Oui c'est dommage, je ne vois plus l'exemple du compte est bon que l'on avait traité, mais le problème de l'époque était de se débrouiller pour éviter les doublons, car on avait des chiffres en doubles, on avait par exemple traité un cas avec juste le chiffre 'deux', et cherché toutes les possibilité en détectant par exemple que
2+( 2*2*2)+2 c'était la même chose que 2*2*2+2+2, j'avais tenté l'algo au fil de l'eau pour ne pas avoir de stockage de résultats intermédiaire, Fatal avait lui détecté les doublons à postériori
Sinon oui la notation posfixée ( polonaise inversée) est une méthode assez efficace d'attaquer le problème car on contourne ( de fait) la gestion des parenthèses
il faut donc avec tes 5 chiffres générer toute les possibilité avec comme stockage le calcul en ecriture postfixée et sa pile d'éxecution
A chaque étape on ajoute un chiffre ( c'est toujours possible) ou un opérateur si on a deux opérandes d'empilés
exemple
le calcul :1 2 + 3 4 +
la pile associée : 3 7
on peut donc empiler un opérateur exemple :*
le calcul 1 2 + 3 4 + *
la pile 21
ou un chiffre
le calcul 1 2 + 3 4 + 5
la pile 3 7 5
là on ne pourra empiler que des opérateur, pour vider la pile de calcul exemple :
le calcul 1 2 + 3 4 + 5 +
la pile 3 12
puis
le calcul 1 2 + 3 4 + 5 + *
la pile 36
on a donc "a la main" trouvé quelques résultats
(1+2) * (3+4) = 21
(1+2) * (3+4+5) = 36
Reste a écrire l'algo en essayant à chaque fois tous les chiffres restant ou si c'est autorisé les 4 opérateurs.