Calcul de nombre
tt
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
je voudrais savoir comment faire un programme qui retrouve un nombre (donné aléatoirement) à partir de 6 nombres donnés aussi aléatoirement comme dans la partie chiffres du jeu télévisé "Chiffres et des lettres"
Merci d'avance
je voudrais savoir comment faire un programme qui retrouve un nombre (donné aléatoirement) à partir de 6 nombres donnés aussi aléatoirement comme dans la partie chiffres du jeu télévisé "Chiffres et des lettres"
Merci d'avance
A voir également:
- Calcul de nombre
- Nombre de jours entre deux dates excel - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
- Calcul de moyenne sur excel - Guide
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
3 réponses
Voici un peu de documentation sur Le Compte est Bon qui te permettra de voir que le problème est plutôt complexe, et en suivant les articles et liens annexes tu devrais trouver la réponse à ta question...
tt
Merci pour ce lien mais comme tu l'a dit c'est un peu compliqué!!! Et il n'explique pas assez (à mon gout) comment programmer cette partie!!
Dans un premier temps, renseigne toi sur les Notations infixée, préfixée, polonaise et postfixée (surtout postfixée)
Si tu comprends le principe tu verras qu'il est assez simple de construire un arbre binaire qui calcule en notation postfixée, où à chaque nœud correspondra une opération, et à chaque racine un entier :
Exemple : (3+2)*5 => 3 2 + 5 *
On va dire que la méthode la plus simple à programmer (mais la moins efficace) c'est de générer toutes les notations postfixées possibles, de les calculer, et ne retenir que celle qui a le résultat le plus proche.
Par exemple avec 2, 3, et 5 (je ne garde que les opérations + et - pour l'exemple)
Tu auras donc # # ~ # ~ (où # est 2, 3 ou 5 et ~ est + ou -)
Mais comme je l'ai dit cette méthode est très peu efficace, car on calcule plusieurs fois la même chose (notamment parce que l'addition est commutative) et on peux surement l'améliorer petit à petit.
Autre amélioration à apporter : pouvoir choisir de ne pas choisir un nombre, puisqu'on est pas obligé de prendre tous les chiffres pour jouer, de même il faudra éviter la division 0 ;-)
Si tu comprends le principe tu verras qu'il est assez simple de construire un arbre binaire qui calcule en notation postfixée, où à chaque nœud correspondra une opération, et à chaque racine un entier :
Exemple : (3+2)*5 => 3 2 + 5 *
* + 3 2 5
On va dire que la méthode la plus simple à programmer (mais la moins efficace) c'est de générer toutes les notations postfixées possibles, de les calculer, et ne retenir que celle qui a le résultat le plus proche.
Par exemple avec 2, 3, et 5 (je ne garde que les opérations + et - pour l'exemple)
Tu auras donc # # ~ # ~ (où # est 2, 3 ou 5 et ~ est + ou -)
2 3 + 5 + 10 2 3 + 5 - 0 2 3 - 5 + 4 2 3 - 5 - -6 2 5 + 3 + 10 2 5 + 3 - 4 2 5 - 3 + 0 2 5 - 3 - -6 3 2 + 5 + 10 3 2 + 5 - 0 3 2 - 5 + 6 3 2 - 5 - -4 3 5 + 2 + 10 3 5 + 2 - 6 3 5 - 2 + 0 3 5 - 2 - -4 5 2 + 3 + 10 5 2 + 3 - 4 5 2 - 3 + 6 5 2 - 3 - -6 5 3 + 2 + 10 5 3 + 2 - 6 5 3 - 2 + 4 5 3 - 2 - -4
Mais comme je l'ai dit cette méthode est très peu efficace, car on calcule plusieurs fois la même chose (notamment parce que l'addition est commutative) et on peux surement l'améliorer petit à petit.
Autre amélioration à apporter : pouvoir choisir de ne pas choisir un nombre, puisqu'on est pas obligé de prendre tous les chiffres pour jouer, de même il faudra éviter la division 0 ;-)
Remarque : avec trois chiffres on pourrait également avoir le patron # # # ~ ~
On retomberait encore sur les même résultats car il y aurait équivalence mathématiques entre les patrons deux à deux, mais cela uniquement parce que je n'ai considéré que les opérations + et -
D'un point de vue général pour n chiffres (représentés par #) et n-1 opérations binaires (représentées par ~) il faudrait considérer (n-1)! patrons bien que certains soient identiques.
Bien sûr il n'est pas la peine de tous les traiter tel quel "à la main", ils peuvent être construits les uns par rapport aux autres (il y a donc de la récursivité dans l'air)
Règles de récurrence :
Pour n=1, E1={ # }
Pour l'ensemble des patrons à n chiffres, on construit l'ensemble des patrons à n+1 chiffres en remplaçant un et un seul # par ##~ autant de fois que nécessaire pour remplacer chaque #
En particulier, pour n=2, on a E2={ # # ~ }
Exemple : passage de E2 à E3
On passe de "# # ~" à "##~ # ~" et de "# # ~" à "# ##~ ~"
donc E3={ # # ~ # ~, # # # ~ ~ }
Pour n<=5 (dans le "désordre" mais sans les doublons) ça donne :
Après il faut faire un peu de manipulation d'arbres. D'une part pour générer les patrons et d'autre part pour remplacer les # et les ~ par les valeurs ou opérateurs admissibles.
Il ne faudra pas bien sûr de calculer la valeur à chaque fois, de retenir la meilleure solution au fur et à mesure, et de s'arrêter immédiatement si on arrive au résultat exact, et ce avant de faire exploser l'exponentielle !
Remarque : en s'arrêtant le plus tôt possible on aura un n minimum, et donc une solution plus simple que si on laissait le programme continuer pour chercher une autre solution avec des n plus grands.
Bonne chance !!!
On retomberait encore sur les même résultats car il y aurait équivalence mathématiques entre les patrons deux à deux, mais cela uniquement parce que je n'ai considéré que les opérations + et -
D'un point de vue général pour n chiffres (représentés par #) et n-1 opérations binaires (représentées par ~) il faudrait considérer (n-1)! patrons bien que certains soient identiques.
Bien sûr il n'est pas la peine de tous les traiter tel quel "à la main", ils peuvent être construits les uns par rapport aux autres (il y a donc de la récursivité dans l'air)
Règles de récurrence :
Pour n=1, E1={ # }
Pour l'ensemble des patrons à n chiffres, on construit l'ensemble des patrons à n+1 chiffres en remplaçant un et un seul # par ##~ autant de fois que nécessaire pour remplacer chaque #
En particulier, pour n=2, on a E2={ # # ~ }
Exemple : passage de E2 à E3
On passe de "# # ~" à "##~ # ~" et de "# # ~" à "# ##~ ~"
donc E3={ # # ~ # ~, # # # ~ ~ }
Pour n<=5 (dans le "désordre" mais sans les doublons) ça donne :
# # # ~ # # # ~ ~ # # ~ # ~ # # # # ~ ~ ~ # # # ~ # ~ ~ # # # ~ ~ # ~ # # ~ # # ~ ~ # # ~ # ~ # ~ # # # # # ~ ~ ~ ~ # # # # ~ # ~ ~ ~ # # # # ~ ~ # ~ ~ # # # # ~ ~ ~ # ~ # # # ~ # # ~ ~ ~ # # # ~ # ~ # ~ ~ # # # ~ # ~ ~ # ~ # # # ~ ~ # # ~ ~ # # # ~ ~ # ~ # ~ # # ~ # # # ~ ~ ~ # # ~ # # ~ # ~ ~ # # ~ # # ~ ~ # ~ # # ~ # ~ # # ~ ~ # # ~ # ~ # ~ # ~
Après il faut faire un peu de manipulation d'arbres. D'une part pour générer les patrons et d'autre part pour remplacer les # et les ~ par les valeurs ou opérateurs admissibles.
Il ne faudra pas bien sûr de calculer la valeur à chaque fois, de retenir la meilleure solution au fur et à mesure, et de s'arrêter immédiatement si on arrive au résultat exact, et ce avant de faire exploser l'exponentielle !
Remarque : en s'arrêtant le plus tôt possible on aura un n minimum, et donc une solution plus simple que si on laissait le programme continuer pour chercher une autre solution avec des n plus grands.
Bonne chance !!!