C语言案例——汉诺塔问题

题目描述

  1. 每次只能移动一个圆盘
  2. 大的圆盘不能放在小的圆盘上面
  3. 可以使用一根额外的柱子作为辅助

默认三个柱子,盘子数量为N,

解法思路

设A\B\C三个柱子

将A柱上的n个盘子挪到C柱上,只有一个盘子的时候,只需从A挪到C。如果盘子的数量大于两个,将n-1个盘子从A挪到B,再将最下面的那个盘子从A挪到C 再将B上的n-1个盘子挪到C上 ......

解法代码

cs 复制代码
#include <stdio.h>  

void move(int num, char x, char y)
{
    printf("第%d个盘子,%c--->%c\n", num, x, y);
}

void hannot(int num, char A, char B, char C)
{
    if (num == 1)
    {
        move(num, A, C);
    }
    else
    {
        hannot(num - 1, A, C, B);
        move(num, A, C);
        hannot(num - 1, B, A, C);
    }
}

int main()
{
    int num = 0; // 盘子数量  
    printf("请输入盘子的数量: ");
    scanf("%d", &num);
    hannot(num, 'A', 'B', 'C'); // A起始位置,B中转位置,C目标位置  
    return 0;
}

运行结果

请输入盘子的数量:

3

第1个盘子,A--->C

第2个盘子,A--->B

第1个盘子,C--->B

第3个盘子,A--->C

第1个盘子,B--->A

第2个盘子,B--->C

第1个盘子,A--->C

相关推荐
阿钱真强道几秒前
20 嵌入式操作系统 | ubus:把自己的程序状态暴露出去
c语言·进程通信·ubus·ubusd·blobmsg
DeepAgent2 分钟前
AI Agent 工程实践(49):一次真实优化——从 Agent v1 到 v2
开发语言·人工智能·agent
知识分享小能手14 分钟前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
顺顺 尼20 分钟前
linux 进程信号(上)
linux·c++·算法
罗西的思考26 分钟前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(5)--- GRPO
人工智能·算法·机器学习
郑州光合科技余经理31 分钟前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
richard_yuu1 小时前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
mmmmath_31 小时前
LeetCode.225.用队列实现栈
算法
Elaine3361 小时前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础
2601_965742221 小时前
布局GEO AI本地营销,我重点看这几个细节
大数据·人工智能·算法·ai·新媒体运营