永发信息网

C++之汉诺塔问题

答案:6  悬赏:0  手机版
解决时间 2021-06-06 13:17
  • 提问者网友:别再叽里呱啦
  • 2021-06-06 10:12

汉诺塔问题。这是一个古典的数学问题:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只许移动一个盘子,且在移动过程中在3个座上都始终保持大盘子在下,小盘子在上。在移动过程中可以利用B座,要求编程序打印移动的步骤。

这道题主要考察的是递归,貌似还要用到指针,但我们还没有学过指针,我的问题就是在不用指针的情况下,能不能做出这道题?!

怎么做?

最佳答案
  • 五星知识达人网友:执傲
  • 2021-06-06 10:54

采用递归调用就行:


#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');
}


运行结果:


全部回答
  • 1楼网友:过活
  • 2021-06-06 15:16

#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;

}

  • 2楼网友:笑迎怀羞
  • 2021-06-06 13:46

#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; }

这个能行的, 比较简单明了。

  • 3楼网友:人類模型
  • 2021-06-06 13:39
汉诺塔是一个经典的递归问题 不需要用到指针的 递归思想就是 如果只有一个盘子 那么 把盘子直接移到目的柱 有两个盘子 把最上面一个移动到中间柱 把最下面的一个移动到目的柱 然后把中间的移动到目的柱 当规模为n的时候也就是这样的递归思想 把上面的n-1个移动到中间柱 把最后一个移动到目的柱 然后再把n-1个移动到目的柱 我只把思想给你解释一下 至于代码 这么经典的程序 网上多的是 去找找就有了
  • 4楼网友:狂恋
  • 2021-06-06 12:32
我没研究过汉诺塔,但是C/C++有很多时候是可以用数组来解决问题而避免使用指针的。
  • 5楼网友:话散在刀尖上
  • 2021-06-06 12:12

#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;

}

没有使用指针,符合你的要求,呵呵

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯