ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Casse-tête impair  (algorithmique)

Un exercice du type "casse-tête" où l'on apprend à convertir un nombre en chaîne de caractères (et inversement) et où l'ordinateur s'avère perspicace :

On lui énonce le problème dans son langage, l'utilisateur-programmeur ne cherchant nullement à le résoudre, même partiellement :
 


Question :
    

Quel est le plus petit entier naturel impair de trois chiffres non nuls tel qu'en l'ajoutant au nombre obtenu en renversant l'ordre de son écriture la somme trouvée ne contienne aucun chiffre pair ?

Contre-exemple et exemple : 237 + 732 = 969      837 + 738 = 1575
 


» JavaScript et le traitement des chaînes de caractères

Si vous séchez après avoir bien cherché : »


   Ce casse-tête est emprunté à Jacques Arsac dans son livre : Jeux et casse-tête à programmer, Éd. Dunod, 1985.
© Serge Mehl - www.chronomath.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Solution :



 

<SCRIPT LANGUAGE=JavaScript>
function casstet()
{
for(n=111;n<=999;n+=2)
{test=1;
n$=n.toString() ; L=n$.length ; p$=""

  for(i=L-1;i>=0;i--)
  {
  x$=n$.charAt(i);
  if (x$=="0") {test=0} else {p$=p$+x$}
  }

if (test==1)
  {
  p=eval(p$) ; s=n+p ; s$=s.toString();
  for (i=1;i< s$.length;i++)
    {
    m=eval(s$.charAt(i));
    if (m%2==0) {test=0}
    }

  if (test==1) {alert("le plus petit est "+n) ; return}
  }

}
}
</SCRIPT>

 

Programmation du problème en JavaScript

  • On va de n = 111 à N = 999 de deux en deux, n est convertie en chaîne : n$ de longueur L. On initialise p$ à vide : ce sera la chaîne constituée des chiffres de n renversé.
     

  • On part du dernier chiffre de n vers le 1er. On note n$ le i-ème caractère correspondant . S'il est nul, on passe au n suivant, sinon, on le concatène à p$.

  • La variable test est mise à zéro si le i-ème chiffre de n est un zéro et on passera alors au n suivant.


     

  • On récupère la valeur numérique du nombre inversé dans m. On calcule la somme s de n et p et on cherche à savoir si s contient un nombre pair : a%b fournit le reste de la division euclidienne de a par b; si oui, on passe au n suivant.


     

  • Si n convient, on l''affiche sinon on passe au n suivant.

» traitement des chaînes de caractères


© Serge Mehl - www.chronomath.com