汉诺塔问题。这是一个古典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只许移动一个盘子,且在移动过程中在3个座上都始终保持大盘子在下,小盘子在上。在移动过程中可以利用B座,要求编程序打印移动的步骤。
这道题主要考察的是递归,貌似还要用到指针,但我们还没有学过指针,我的问题就是在不用指针的情况下,能不能做出这道题?!
怎么做?
汉诺塔问题。这是一个古典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只许移动一个盘子,且在移动过程中在3个座上都始终保持大盘子在下,小盘子在上。在移动过程中可以利用B座,要求编程序打印移动的步骤。
这道题主要考察的是递归,貌似还要用到指针,但我们还没有学过指针,我的问题就是在不用指针的情况下,能不能做出这道题?!
怎么做?
采用递归调用就行:
#include<iostream>
using namespace std;
void move(char getone,char putone)
{
cout<<getone<<"-->"<<putone<<endl;
}
void hanoi(int n,char one,char two,char three)
{
void move(char getone,char putone);
if(n==1)move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
int main()
{
void hanoi(int n,char one,char two,char three);
int m;
cout<<"请输入盘子的数量:";
cin>>m;
cout<<"移动"<<m<<"个盘子的步骤:"<<endl;
hanoi(m,'A','B','C');
}
运行结果:
#include<iostream> using namespace std; int sum=0; void hanoi(char a,char b,char c,int n) { if(n==1) { cout<<a<<"->"<<c<<endl; } else { hanoi(a,c,b,n-1); cout<<a<<"->"<<c<<endl; sum=sum+2;
hanoi(b,a,c,n-1); } } int main() { int n; cout<<"输入碟子数:"; cin>>n; hanoi('A','B','C',n); cout<<sum+1<<endl;
}
#include <fstream> #include <iostream> using namespace std; ofstream fout(“out.txt”); void Move(int n,char x,char y) { fout<<“把”<<n<<“号从”<<x<<“挪动到”<<y<<endl; } void Hannoi(int n,char a,char b,char c) { if(n==1) Move(1,a,c); else { Hannoi(n-1,a,c,b); Move(n,a,c); Hannoi(n-1,b,a,c); } } int main() { fout<<“以下是7层汉诺塔的解法:”<<endl; Hannoi(7,‘a’,‘b’,‘c’); fout.close(); cout<<“输出完毕!”<<endl; return 0; }
这个能行的, 比较简单明了。
#include<iostream>
using namespace std;
int main()
{
void hanoi(int n,char one,char two,char three);
int m;
cout<<"input the number of diskes:";
cin>>m;
cout<<"The step to moving"<<m<<"diskes:"<<endl;
hanoi(m,'A','B','C');
return 0;
}
void hanoi(int n,char one,char two ,char three)
{
void move(char x,char y);
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{
cout<<x<<"--->"<<y<<endl;
}
没有使用指针,符合你的要求,呵呵