Casse tête mathématique

Bonjour à tous,

Dans le cadre scolaire nous devons résoudre ce casse tête "vietnamien" (ou serpentin arithmétique) en réalisant un code VBA .

image

Il s'agit de trouver comment placer les nombres de 1 à 9 (une et une seule fois chacun) dans les 9 cases vides pour que le résultat de la formule obtenue soit égal à 66.

Mes connaissances en VBA sont encore très faible et je ne sais pas comment rédiger un tel programme car il existe une multitude de résultat (l'objectif est de toutes les trouvés).

Merci de votre aide.

Bonjour Srvr5,

Voir ce lien serpentin

Dont l'une des solutions.

captserpentin

Bonne continuation.

...proposé aux élèves vietnamiens en CE2 ! Impressionnant, je serais curieux de voir leur taux de réussite à un tel exercice...

Dans le cadre scolaire nous devons résoudre ce casse tête "vietnamien" (ou serpentin arithmétique) en réalisant un code VBA

Et vous n'avez pas un début de début d'idée de code VBA ? Si c'est dans le cadre scolaire vous avez tout intérêt à comprendre plutôt qu'à recopier. Bon courage en tout cas.

Bonjour Srvr5,

Sympa le petit jeu que tu nous proposes. Tu dis qu'il y'a une multitude de solutions possibles. Ton problème a-t-il été solutionné ? sinon je vais me faire un plaisir d'essayer de te te trouver une solution à ça.

Bonjour à tous,

Voici une solution touvée sur le net (non testée) en java script.....peut-être adaptable en vba ?

casse-tête vietnamien

Cordialement,

ah cool, suffit de reprendre le javascript et de le transformer en VBA !

j'ai lu le programme, en fait c'est juste "brutal" = on teste toutes les combinaisons ...

merci xorsankukai

ma question est : quelle est la priorité des opérateurs ? d'abord x et : avant + et - ?

Sub vietnamien()
Rows("1:9").Clear
Dim x
result = 0
test = 1
Do
    GenereSerieAleatoireSansDoublons 9, test
    x = Range(Cells(1, test), Cells(9, test)).Value
    result = x(1, 1) + 13 * x(2, 1) / x(3, 1) + x(4, 1) + 12 * x(5, 1) - x(6, 1) - 11 + x(7, 1) * x(8, 1) / x(9, 1) - 10
    If result = 66 Then test = test + 1
Loop Until test = 11
End Sub

Sub GenereSerieAleatoireSansDoublons(NbValeurs As Integer, test)
    Dim Tableau() As Integer, TabNumLignes() As Integer
    Dim i As Integer, k As Integer

    ReDim Tableau(NbValeurs)
    ReDim TabNumLignes(NbValeurs)

    For i = 1 To NbValeurs
        TabNumLignes(i) = i
        Tableau(i) = i
    Next

    'Initialise le générateur de nombres aléatoires
    Randomize

    For i = NbValeurs To 1 Step -1
        k = Int((i * Rnd) + 1)
        Cells(i, test) = Tableau(TabNumLignes(k))
        TabNumLignes(k) = TabNumLignes(i)
    Next

End Sub

les 10 premières combinaisons trouvées ...

23vietnamien.xlsm (25.86 Ko)

avec la formule pour vérifier !

25vietnamien.xlsm (26.90 Ko)

Merci à tous pour vos réponses,

Steelson & xorsankukai : j'ai effectivement trouvé ce code en Java mais je n'ai pas les connaissances pour le retranscrire en VBA. Merci à vous.

Steelson : la règle des priorités s'applique aux opérations de multiplication et division. D'où l'écriture suivante : =A+(13*B/C)+D+(12*E)-F-11+(G*H/I)-10

Après plusieurs tentatives je vous propose également une solution (voir fichier Excel). N'hésitez pas à me faire un retour.

note : mon code permet d'obtenir toutes les combinaisons possibles par la suite j'applique la formule. Il suffit ensuite de filtrer les résultats égale à 66.

83casse-tete.xlsm (178.18 Ko)
Rechercher des sujets similaires à "casse tete mathematique"