鱼C论坛

 找回密码
 立即注册
查看: 1978|回复: 6

[已解决]汉诺塔问题 求助

[复制链接]
发表于 2022-9-16 15:40:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
盲盒,非粘贴。

请分析一下我这个思路,做出更正。
// 汉诺塔  
#include <iostream>
#include <cstring>
using namespace std; 

void move(int s , char a , char b , char c){
    if (s==1) return;
    cout<<a<<"--"<<b<<endl;
    move(s-1,a,c,b);
    cout<<a<<"--"<<c<<endl;
           
}
 
int main(){
    int n=4;

        move(n,'a','b','c');  // 4层盘,从a杆开始,以b杆为中介,移动到c杆  
        
    return 0;
}
最佳答案
2022-9-16 15:58:56
// 汉诺塔  
#include <iostream>
#include <cstring>
using namespace std;

void move(int s, char a, char b, char c) {
    if (s == 1) { cout << a << "--" << c << endl; return; }
    move(s - 1, a, c, b); // 把n-1的圆环从a移动到b,递归调用下一层就是把a移动到c
    cout << a << "--" << c << endl;
    move(s - 1, b, a, c); //把n-1的圆环从b移动到c
}

int main() {
    int n = 4;

    move(n, 'a', 'b', 'c');  // 4层盘,从a杆开始,以b杆为中介,移动到c杆  

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-16 15:58:56 | 显示全部楼层    本楼为最佳答案   
// 汉诺塔  
#include <iostream>
#include <cstring>
using namespace std;

void move(int s, char a, char b, char c) {
    if (s == 1) { cout << a << "--" << c << endl; return; }
    move(s - 1, a, c, b); // 把n-1的圆环从a移动到b,递归调用下一层就是把a移动到c
    cout << a << "--" << c << endl;
    move(s - 1, b, a, c); //把n-1的圆环从b移动到c
}

int main() {
    int n = 4;

    move(n, 'a', 'b', 'c');  // 4层盘,从a杆开始,以b杆为中介,移动到c杆  

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-9-16 16:06:23 | 显示全部楼层
正纠结:是用两个打印输出,还是用两个调用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-16 16:25:50 | 显示全部楼层

感谢。
仔细阅读。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-16 23:47:37 | 显示全部楼层
想问一下,这个s在递归里,默认是传址操作,还是传值操作?
0次进去,碰到自己,翻倍 2次掉用;没有出来,还碰到自己:
0 1进去 的 成了 4次
0+ 1 =2  把2次翻倍了8次 再进 16 再进 32 此时,开始打印+return
眼看的,没有敲,话说这,真烧脑.
你搞个结果看看.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-17 17:16:47 | 显示全部楼层
你的思路是不清晰的
我的对汉诺塔的理解是建立两种模型
第一种,只有一个盘,解题步骤就是从a-->c
第二种:只有两个盘,把从1-(n-1)个盘看成一个整体,记为盘1,第n个盘记为盘2
解题步骤就是
1、把盘1从a-->b
2、盘2从a-->c
3、盘1从b-->c
完成
希望对你有所帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-9-19 10:48:36 | 显示全部楼层
感谢。  理解了一些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 03:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表