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

相关推荐
踏着七彩祥云的小丑几秒前
Go学习第3天:变量+常量+运算符
开发语言·学习·golang·go
专注搞钱几秒前
用Python写了个SPC自动分析工具,效率提升10倍
开发语言·python
码云骑士4 分钟前
【3.Java基础】Java运算符详解:从算数运算到逻辑判断,一篇文章全部掌握
java·开发语言
雪落漂泊6 分钟前
C++ 继承与多态(下)
开发语言·c++
川冰ICE7 分钟前
JavaScript工程化②|Webpack5基础配置,打包你的第一个项目
开发语言·javascript·ecmascript
YHHLAI7 分钟前
JavaScript 同步异步精讲:单线程、事件循环、Promise 执行机制
开发语言·javascript·ecmascript
yijianace7 分钟前
Python爬虫实战:ThreadPoolExecutor多线程采集书籍信息与图片下载
开发语言·爬虫·python
资深流水灯工程师8 分钟前
PySide6 + Qt Designer + PyCharm 完整开发流程
开发语言·qt·pycharm
BAGAE9 分钟前
FEC-RS前向纠错编码理论及工程实施研究
c语言·c++·qt·算法·决策树·链表
阿旭超级学得完10 分钟前
Linux基础指令 四(apt,vim,git,cgdb)
linux·服务器·开发语言·数据结构·c++·git·vim