那就这样吧e 2022-10-28 17:20 采纳率: 98.1%
浏览 35
已结题

汉诺塔问题进阶无法正确完成要求

这是题目

img


这是我测试和提交的过程

img

img


img

我觉得自己写的没有什么错误,但是检测结果老是错了 大家看一下哪一步出了问题

  • 写回答

2条回答 默认 最新

  • 关注

    你的代码贴出来啊,我写了一个代码,你用我这个试试吧:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    
    int idb[20]={0}, idc[20]={0}, idd[20]={0};    //每个柱子上最上面的盘子的编号
    int nmbb = 20, nmbc = 0, nmbd = 0;            //每个柱子上的盘子数量
    
    char g_b, g_c, g_d;  //三个柱子的编号
    
    void move(char x, char y)
    {
        int id;
        if (x == g_b)
        {
            id = idb[nmbb - 1];
            nmbb--;//盘子数量-1
            printf("%c->%d->%c\n", x, id, y);
            //记录盘子的编号
            if (y == g_c)
                idc[nmbc++] = id;
            else
                idd[nmbd++] = id;
        }
        else if (x == g_c)
        {
            id = idc[nmbc - 1];
            nmbc--;
            printf("%c->%d->%c\n", x, id, y);
            //记录盘子的编号
            if (y == g_b)
                idb[nmbb++] = id;
            else
                idd[nmbd++] = id;
            
        }
        else
        {
            id = idd[nmbd - 1];
            nmbd--;
            printf("%c->%d->%c\n", x, id, y);
            //记录盘子的编号
            if (y == g_b)
                idb[nmbb++] = id;
            else
                idc[nmbc++] = id;
        }
    }
    void hanio(int n, char b, char c, char d)
    {
        if (1 == n)
        {
            move(b, d);
        }
        else
        {
            hanio(n - 1, b, d, c);
            move(b, d);
            hanio(n - 1, c, b, d);
        }
    }
    
    int main()
    {
        int n = 0;
        int i;
        
        //char b, c, d;
        scanf("%d %c %c %c", &n, &g_b, &g_c, &g_d);
        //初始盘子编号
        nmbb = n;
        for (i = 0; i < n; i++)
            idb[i] = n-i;
        hanio(n, g_b, g_d, g_c);  //从最左边柱子移动到中间的柱子上
        return 0;
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月5日
  • 已采纳回答 10月28日
  • 修改了问题 10月28日
  • 创建了问题 10月28日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备