C++之汉诺塔问题
汉诺塔问题。这是一个古典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座...
汉诺塔问题。这是一个古典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只许移动一个盘子,且在移动过程中在3个座上都始终保持大盘子在下,小盘子在上。在移动过程中可以利用B座,要求编程序打印移动的步骤。 这道题主要考察的是递归,貌似还要用到指针,但我们还没有学过指针,我的问题就是在不用指针的情况下,能不能做出这道题?!怎么做?
展开
6个回答
2013-07-20
展开全部
我没研究过汉诺塔,但是C/C++有很多时候是可以用数组来解决问题而避免使用指针的。
2013-07-20
展开全部
汉诺塔是一个经典的递归问题
不需要用到指针的
递归思想就是 如果只有一个盘子
那么 把盘子直接移到目的柱
有两个盘子 把最上面一个移动到中间柱
把最下面的一个移动到目的柱 然后把中间的移动到目的柱
当规模为n的时候也就是这样的递归思想
把上面的n-1个移动到中间柱 把最后一个移动到目的柱
然后再把n-1个移动到目的柱
我只把思想给你解释一下
至于代码 这么经典的程序 网上多的是
去找找就有了
不需要用到指针的
递归思想就是 如果只有一个盘子
那么 把盘子直接移到目的柱
有两个盘子 把最上面一个移动到中间柱
把最下面的一个移动到目的柱 然后把中间的移动到目的柱
当规模为n的时候也就是这样的递归思想
把上面的n-1个移动到中间柱 把最后一个移动到目的柱
然后再把n-1个移动到目的柱
我只把思想给你解释一下
至于代码 这么经典的程序 网上多的是
去找找就有了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-20
展开全部
#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;} 没有使用指针,符合你的要求,呵呵
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2020-05-09
展开全部
#include<iostream>
using namespace std;
void move(int n,char ch1,char ch2,char ch3)
{
if(n==1) cout<<":"<<(char)ch1<<"->"<<(char)ch3<<endl;
else
{
move(n-1,ch1,ch3,ch2);
cout<<":"<<(char)ch1<<"->"<<(char)ch3<<endl;
move(n-1,ch2,ch1,ch3);
}
}
int main()
{
move(64,'A','B','C');
return 0;
}
用这个
using namespace std;
void move(int n,char ch1,char ch2,char ch3)
{
if(n==1) cout<<":"<<(char)ch1<<"->"<<(char)ch3<<endl;
else
{
move(n-1,ch1,ch3,ch2);
cout<<":"<<(char)ch1<<"->"<<(char)ch3<<endl;
move(n-1,ch2,ch1,ch3);
}
}
int main()
{
move(64,'A','B','C');
return 0;
}
用这个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
汉诺塔问题怎么解决,可以利用递归法来解决。设移动盘子数为n,为了将这n个盘子从A杆移动到C杆,可以以C盘为中介,从A杆将1至n-1号盘移至B杆。将A杆中剩下的第n号盘移至C杆。以A杆为中介;从B杆将1至n-1号盘移至C杆。这样汉诺塔问题就解决了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询