Avatar billede kar Nybegynder
11. september 2002 - 13:37 Der er 4 kommentarer og
1 løsning

Hanoi´s tårne

Hej!
Jeg er ved at prøve at løse en opgave der handler om at få flyttet få flyttet 3 skiver fra een pind til en tredie. Mit program ser ud som flg: men jeg kan ikke får det til at virke er der nogle som kan hjælpe?

#include<iostream.h>
#include<conio.h>
  //#include "tstring.h"

void hanoi(int n, const string& initNeedle,
                  const string& endNeedle,
                  const string& tempNeedle)
{
if (n == 1)
  cout <<"move"<< initNeedle<<"to"<<endNeedle<<endl;

  else
  {

  hanoi(n-1, initNeedle, tempNeedle, endNeedle);
  cout<<" move" <<initNeedle << "to" <<endNeedle<<endl;

  hanoi(n-1,tempNeedle,endNeedle,initNeedle);
  }

}



    int main()
{

int n;
string needleA ="A",
        needleB ="b",
        needleC ="C";

        cout<<"Enter the number of disks: ";
        cin>> n;
        cout<<"the solution for n= " << n <<endl;
        hanoi(n,needleA,needleC,needleB);

        return 0;




}


På forhånd tak for svaret.
hilsner karina
Avatar billede Slettet bruger
11. september 2002 - 13:40 #1
Måske kan dette inspirere dig til løsningen:

http://www.dr.dk/videnom/85software/index.htm

Rul ned til "The Hanoi Towers Problem"
Avatar billede chries Nybegynder
11. september 2002 - 14:03 #2
Dit algoritme virker fint. Følgende kode kører i visual c++:

#include <iostream.h>
#include <conio.h>
#include <string>

using namespace std;

void hanoi(int n, const string& initNeedle,
                  const string& endNeedle,
                  const string& tempNeedle)
{
    static int counter = 1;
    if (n == 1)
    {
        cout << counter++ << ". move from " << initNeedle.c_str() <<" to "<< endNeedle.c_str() << endl;
    }
    else
    {
        hanoi(n-1, initNeedle, tempNeedle, endNeedle);
        cout<< counter++ << ". move from " << initNeedle.c_str() << " to " << endNeedle.c_str() << endl;
        hanoi(n-1,tempNeedle,endNeedle,initNeedle);
    }
}



int main()
{
    int n;
    string    needleA ="A",
            needleB ="B",
            needleC ="C";

    cout<<"Enter the number of disks: ";
    cin>> n;

    cout<<"the solution for n= " << n <<endl;
    hanoi(n,needleA,needleC,needleB);

    return 0;
}
Avatar billede kar Nybegynder
11. september 2002 - 14:10 #3
Mange tak - super for nu virker det bare.
hilsner karina
Avatar billede soepro Nybegynder
16. september 2002 - 08:52 #4
chries >> Udover du har lavet en counter, hvad er så forskellen på din algoritme og den der ikke virkede ?
Avatar billede chries Nybegynder
16. september 2002 - 09:17 #5
gjodt brug af string mulig i visual c++:

#include <string>

using namespace std;


gjordt at string kan udskrives, der findes ikke << operatorer for string. derfor string_object.c_str()

        cout << counter++ << ". move from " << initNeedle.c_str() <<" to "<< endNeedle.c_str() << endl;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester