![]() ![]() |
Si on écrit les entiers de 1 à 365, combien écrit-on de fois le chiffre 3 ?
Un petit exo de type casse-tête que l'ordinateur résout bien plus vite que le raisonnement intellectuelo-mathématique... On utilise ici la capacité d'un langage informatique à manipuler les chaînes de caractères. Mais pour les purs matheux, une solution plus cartésienne est ensuite donnée !
Programme JavaScript : |
La reconnaissance d'un chiffre dans un nombre passe par la conversion de ce nombre en une chaîne de caractères : on utilise la méthode toString().
C'est la variable a$ qui contiendra successivement les nombres de 1 à nb (nombre donné par l'utilisateur) et convertis en chaîne par la fonction toString (par défaut, ici nb= 365).
La commande prompt affiche une fenêtre d'entrée (champ texte). La fonction eval calcule l'expression donnée (on peut très bien entrer 25*10 au lieu de 250).
On passe alors en revue les chiffres de ce nombre du 1er (rang 0) au dernier (rang L - 1, si L est la longueur de la chaîne) grâce à l'instruction d'extraction d'un caractère dans une chaîne : a$.charAt(j)
Pour les récalcitrants aux méthodes informatiques et qui n'ont pas foncièrement tort... : |
On est en présence d'un petit problème statistique. Décomposons-le en classes de nombres. La seconde ligne du tableau ci-dessous indique les effectifs de chaque classe (ouverte à droite) :
|
|
|
|
|
|
|
|
|
|
|
|
Justifications :
De 1 à 10, il n'y a qu'un cas, c'est 3.
De 10 à 30, il y a deux cas correspondant à 13 et 33.
La classe [30,40[ est particulière car ses nombres commencent par 3, on compte donc 10 cas de 30 à 39, augmenté du 3 de 33 : 11 cas.
Le cas de la classe [40,100[ est évident.
[100,200[ et [200,300[ se comportent comme une classe [1,100[ car le 1 (ou le 2) des centaines n'apportent pas de 3. Donc 1 + 2 + 11 + 6 x 2 = 40 cas.
[300,365[ fournit 66 fois le chiffre 3 pour les centaines, puis on décompose la classe [0,65[ en :
Nous obtenons au total : 1 + 2 + 11 + 6 + 40 + 83 = 143 cas.➔ Certains penseront ou diront peut-être que cette méthode est encore peu satisfaisante eu égard aux méthodes d'investigation combinatoire du type : si le nombre est de 3 chiffres, classe [100,300[, il peut contenir :
un seul 3 : dans ses unités : 2 x (9 x 1); dans ses dizaines : 2 x (1 x 9)
deux 3 : donc un 3 en unité et en dizaine : 2 x (1 x 1) , soit 4 trois
soit au total : 40 trois dans la classe [100,300[. Reste à étudier les autres classes, comme la classe [300,365[ où la logique combinatoire est plus difficile à mettre en œuvre...