Juste avant le weekend de Pâques, je présente une petite news de « 20 minutes », c’est Aline Mathey (prof de maths à Orléans) qui m’a alerté par mail. Déjà merci Aline, c’est toujours avec plaisir que je lis tes mails ! 🙂
Bref, voici que Cédric Villani joue à résoudre un problème de mathématiques vu il y a quelques années sur internet. Si, si, il se prête au jeu, et c’est plutôt chouette à voir.
On y voit l’essai-erreur, la réduction des choix possibles, un peu de vocabulaire sur la divisibilité, les priorités opératoires….
Bon d’abord voici le problème : on a une grille.
Il faut remplir les cases vides avec les nombres : 1,2,3,4,5,6,7,8,9.
Et voici comment Cédric Villani s’en sort …. ou pas, mais la question n’est pas là, il n’était pas forcément prêt à travailler dessus. (Les journalistes l’ont un peu piégé).
Et puis, peut-être qu’en voyant cela, les élèves pourraient se dire que, oui, parfois on peut bloquer (tout le monde peut bloquer, même un boss des maths) , mais qu’il faut persévérer!
Pour info, ce problème à plusieurs solutions, une petit vingtaine, je crois.
Peut-être que programmer avec scratch pour le résoudre pourrait être un truc sympa…. A voir 🙂
Salut et merci pour ton blog que je visite régulièrement,
après avoir un peu galéré à chercher ce truc sans réussir je me suis décidé à faire un programme en Python que je te copie-colle ci-dessous.
Il me trouve 128 solutions (je m’attendais à bien moins) et en en testant une au hasard, histoire de vérifier, je suis tombé sur un cas où les 2 divisions ne tombent pas « juste » mais donnent des « ,5 » qui se compensent : 8 + 13*9/2 + 3 + 12*1 – 5 – 11 + 7*6/4 – 10
le programme :
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import itertools
def f(l):
return l[0] + 13*l[1]/l[2] + l[3] + 12*l[4] – l[5] – 11 + l[6]*l[7]/l[8] – 10
nb = 0
for l in list(itertools.permutations([1,2,3,4,5,6,7,8,9])):
result = f(l)
if result == 66:
print(l, ‘–>’, result)
nb += 1
print()
print(‘Il y a {0} solutions !’.format(nb))
argh ! L’indentation a été perdue au passage
Bonjour,
J’ai cherché les solutions (avec un programme en c) selon deux méthodes :
1) sans gérer les priorités des x et /, càd une opération après l autre. Il y a exactement 119 solutions (sans division à virgule)
2) en gérant les priorités des opérateurs x et / et avec division sans reste il y a exactement 20 solutions parmi 9! :
[ 1] 3 2 1 5 4 7 8 9 6
[ 2] 3 2 1 5 4 7 9 8 6
[ 3] 5 2 1 3 4 7 8 9 6
[ 4] 5 2 1 3 4 7 9 8 6
[ 5] 5 3 1 7 2 6 8 9 4
[ 6] 5 3 1 7 2 6 9 8 4
[ 7] 5 4 1 9 2 7 3 8 6
[ 8] 5 4 1 9 2 7 8 3 6
[ 9] 5 9 3 6 2 1 7 8 4
[ 10] 5 9 3 6 2 1 8 7 4
[ 11] 6 3 1 9 2 5 7 8 4
[ 12] 6 3 1 9 2 5 8 7 4
[ 13] 6 9 3 5 2 1 7 8 4
[ 14] 6 9 3 5 2 1 8 7 4
[ 15] 7 3 1 5 2 6 8 9 4
[ 16] 7 3 1 5 2 6 9 8 4
[ 17] 9 3 1 6 2 5 7 8 4
[ 18] 9 3 1 6 2 5 8 7 4
[ 19] 9 4 1 5 2 7 3 8 6
[ 20] 9 4 1 5 2 7 8 3 6