Chemin entre 2 nombres

On se donne deux nombres entiers. A partir du premier on peut lui ajouter ou lui retrancher la somme ou la différence de ses unités et de ses dizaines. Peut-on trouver un algorithme qui, pour un nombre de départ, un nombre d'arrivée et une profondeur de recherche donnés, trouver une succession d'étapes qui mènent du nombre de départ au nombre d'arrivée ?


Nombre de départ :

Nombre d'arrivée :

Profondeur de recherche :


Routine de calcul proposée par Christophe (Galois 2015)

function noeudsFils(nombre)
{
    var unites = nombre % 10;
    var dizaines = Math.floor(Math.abs(nombre / 10));
    var fils = [];
    fils.push(nombre + unites + dizaines);
    fils.push(nombre - unites - dizaines);
    fils.push(nombre + Math.abs(unites - dizaines));
    fils.push(nombre - Math.abs(unites - dizaines));
    return fils;
}
function imprimerNombres(nombres)
{
    var c = nombres.length;
    var texte = '';
    for (var i = 0 ; i < c ; i++)
    {
        texte += parseInt(nombres[i]) + '
'; } document.getElementById("zoneReponse").innerHTML = texte; } function recherche(nombreActuel, nombreATrouver, profondeur, nombres) { if (nombreActuel == nombreATrouver) { imprimerNombres(nombres); return true; } if (profondeur <= 0) { return false; } var fils = noeudsFils(nombreActuel); for (var i = 0 ; i < 4 ; i++) { nombres.push(fils[i]); if (recherche(fils[i], nombreATrouver, profondeur-1,nombres)) { nombres.pop(); return true; } nombres.pop(); } return false; } function commencerRecherche() { var nombreDepart = parseInt(document.getElementById('entreeNombreDepart').value); var nombreArrivee = parseInt(document.getElementById('entreeNombreArrivee').value); var profondeur = parseInt(document.getElementById('entreeProfondeur').value); if (isNaN(nombreDepart) || isNaN(nombreArrivee) || isNaN(profondeur)) { return; } var nombres = [nombreDepart]; for (var i = 0 ; i <= profondeur ; i++) { if (recherche(nombreDepart, nombreArrivee, i, nombres)) { return; } } document.getElementById("zoneReponse").innerHTML = 'Aucune solution trouvée'; } window.onload = function () {document.getElementById('boutonOK').onclick = commencerRecherche;}


© 2009-2017 - www.centre-galois.fr