Calcul de nombre

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

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
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...
0
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!!
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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 *

    *
 +
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 ;-)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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 !!!
0
Mike-31 Messages postés 19572 Date d'inscription   Statut Contributeur Dernière intervention   5 140
 
Salut,

Question pertinente très intéressante mais très complexe.
Les numéros tirés au sort, sont de quelle valeur de 1 à 10 ou comme au "Chiffres et des lettres" de 1 à 100
0
tt
 
oui en fait, il faut 5 chiffres entre 1 et 10 et un chiffre choisi entre 25,50,75,100
0