Algo C++
hano
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour, pouvez m'expliquer le code C++ suivant portant sur le jeu des tours de hanoï, merci à vous :
#include <stdio.h>
#include <time.h> // time()
// déplacer n disques du socle depart vers le socle but
// en utilisant le socle intermédiaire.
void deplacer (int n, char depart, char but, char intermediaire)
{
if (n > 0)
{
printf ("Deplace un disque de la tige %c --> %c\n", depart, but);
deplacer (n-1, depart, intermediaire, but);
deplacer (n-1, intermediaire, but, depart);
}
}
int main ()
{
int n;
printf ("Nombre de disques a deplacer ? ");
scanf ("%d", &n);
//time_t topDebut; time (&topDebut);
deplacer (n, 'A', 'B', 'C');
//time_t topFin; time (&topFin);
//printf ("de %d à %d = %d\n", topDebut, topFin, topFin - topDebut);
}
#include <stdio.h>
#include <time.h> // time()
// déplacer n disques du socle depart vers le socle but
// en utilisant le socle intermédiaire.
void deplacer (int n, char depart, char but, char intermediaire)
{
if (n > 0)
{
printf ("Deplace un disque de la tige %c --> %c\n", depart, but);
deplacer (n-1, depart, intermediaire, but);
deplacer (n-1, intermediaire, but, depart);
}
}
int main ()
{
int n;
printf ("Nombre de disques a deplacer ? ");
scanf ("%d", &n);
//time_t topDebut; time (&topDebut);
deplacer (n, 'A', 'B', 'C');
//time_t topFin; time (&topFin);
//printf ("de %d à %d = %d\n", topDebut, topFin, topFin - topDebut);
}
A voir également:
- Algo C++
- Algo prono - Télécharger - Sport
- Algo du cheval - Forum Programmation
- Aide : algo palindrome - Forum Programmation
- Demande d'algo Mastermind - Forum Programmation
- Aide pour exercice algo - Forum Algorithmes / Méthodes
5 réponses
Il est faux cet algorithme... Regarde les trois premières étapes pour n=3 :
Tu te retrouves à mettre la plus grande pièce par dessus la plus petite...
Or tu dois toujours avoir les petites pièces au dessus des grandes !
A -> B // petite pièce sur tige vide A -> C // moyenne pièce sur tige vide A -> B // grande pièce sur la petite pièce !
Tu te retrouves à mettre la plus grande pièce par dessus la plus petite...
Or tu dois toujours avoir les petites pièces au dessus des grandes !
Salut,
Heu.. oui je me suis trompé en faisant des modif...pour voir ce que ça donne, voici le vrai code :
J'comprends pas trop..
merci
Heu.. oui je me suis trompé en faisant des modif...pour voir ce que ça donne, voici le vrai code :
/* hanoi.cpp tours de Hanoi exemple de programme avec deux appels récursifs */ #include <stdio.h> #include <time.h> // time() // déplacer n disques du socle depart vers le socle but // en utilisant le socle intermédiaire. void deplacer (int n, char depart, char but, char intermediaire) { if (n > 0) { deplacer (n-1, depart, intermediaire, but); printf ("Déplacer un disque de %c --> %c\n", depart, but); deplacer (n-1, intermediaire, but, depart); } } void main () { printf ("Nombre de disques à déplacer ? "); int n; scanf ("%d", &n); //time_t topDebut; time (&topDebut); deplacer (n, 'A', 'B', 'C'); //time_t topFin; time (&topFin); //printf ("de %d à %d = %d\n", topDebut, topFin, topFin - topDebut); }
J'comprends pas trop..
merci
Merci, je comprends le principe mais certaines partie de code c++ me paraissent fliou comme :
deplacer (n-1, depart, intermediaire, but); c'est l'appel de la fonction void ? c'est bien ça ?
deplacer (n, 'A', 'B', 'C'); Sorte d'ou les A, B, C, il n'y a pas de variable comme pour n...
voilà si tu pouvais m'expliquer, pour en apprendre plus sur le langage C++
deplacer (n-1, depart, intermediaire, but); c'est l'appel de la fonction void ? c'est bien ça ?
deplacer (n, 'A', 'B', 'C'); Sorte d'ou les A, B, C, il n'y a pas de variable comme pour n...
voilà si tu pouvais m'expliquer, pour en apprendre plus sur le langage C++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Peut-être que tu comprendras mieux avec un affichage complet de ce qui se passe :
#include <stdio.h> void aff(char w,int n,char c1,char c2,char c3,char* ch="") { int i; for (i=0; i<3-n; i++) printf(" "); printf("deplacer(%d,%c,%c,%c) [%c]\t%s\n",n,c1,c2,c3,w,ch); } void deplacer(int n, char depart, char but, char intermediaire) { char ch[50]; sprintf(ch,"Deplacement %c --> %c",depart,but); if (n>0) { aff('x',n,depart,but,intermediaire); deplacer(n-1, depart, intermediaire, but); aff('y',n,depart,but,intermediaire,ch); deplacer(n-1, intermediaire, but, depart); aff('z',n,depart,but,intermediaire); } } int main() { deplacer(3,'A','B','C'); }