Partage
  • Partager sur Facebook
  • Partager sur Twitter

La tour de Hanoï

Algorithmes en C++

Sujet résolu
    2 juin 2008 à 7:52:14

    Bonjour :D
    Depuis quelque temps je me suis attaqué au algorithmes en C++
    J'ai trouvé sur Wikipedia le problème de la tour de Hanoï, casse tête mathématique (je ne suis pas infidèle au siteDuZero mais je n'ai pas trouvé de topic sur le sujet :-° )
    et le code permettant d'en trouver la solution ;)
    Mais il y a 2 fragment du code que je ne comprends pas ; les voici :
    x < (1<<n)
    

    (x&x-1)%3
    


    Je ne vois pas que font les fonctions "<<" et "&" :(
    Quelqu'un pourrait il m'éclairer ?
    Merci :D

    • Partager sur Facebook
    • Partager sur Twitter
      2 juin 2008 à 8:02:39

      si tu t'y connais en C je peux te filer la solution . car je me suis deja confronte a ce probleme sur france ioi et j'ai du y passer 2semaines pour le resoudre .
      • Partager sur Facebook
      • Partager sur Twitter
        2 juin 2008 à 9:20:25

        1 << n == 2 puissance n ; C'est 1 (==2^0) décalé n fois vers la gauche, chaque décalage étant une multiplication par 2

        (x&x-1) % 3 == ET binaire entre x et x-1, modulo 3
        Je peine à voir ce que ce hack modélise en revanche.

        Les tours de hanoi sont un problème très simple à résoudre récursivement, en voyant des hacks pareils, j'avoue que je prends un peu peur.
        • Partager sur Facebook
        • Partager sur Twitter
        C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
          2 juin 2008 à 9:24:18

          Les opérateurs << et & sont des opérateurs bit-à-bit.
          Je ne t'explique pas en détail mais je te donne juste une idée:
          -----------------------------------------
          x<<n signifie : tu prends le nombre x, tu le décompose en binaire, et tu décales les bits de n rang vers la gauche.
          Exemple : 5 << 3 = 40
          5 en binaire : 101
          Je décale vers la gauche et je comble par des 0 : 101000 soit en décimal 40

          En fait, écrire x << n revient à écrire x*(2^n)
          -----------------------------------------
          x & y consiste à décomposer x et y en binaire, les superposer, et comparer leurs rangées de bits unes à unes : si les deux sont égales à un, on inscrit un dans le résultat 1, sinon 0
          Exemple : 13 & 10 = 8

          13 : 1101
          10 : 1010
          x&y: 1000 soit en décimal 8

          -----------------------------------

          Pour ton cas, x < (1 << n) peut se traduire par : si x est plus petit que 2 à la puissance n. Pour la deuxième formule, tu utilises la méthode que je t'ai donnée. Si tu ne comprends toujours pas, signale le moi par MP

          En esperant que cela peut t'aider ^^
          • Partager sur Facebook
          • Partager sur Twitter
            2 juin 2008 à 18:38:21

            ok merci pour vos réponses :D
            • Partager sur Facebook
            • Partager sur Twitter

            La tour de Hanoï

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown