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

相关推荐
xiaoshuaishuai813 小时前
C# 实现不掉线的CRM
开发语言·c#
YuanDaima204813 小时前
大语言模型生命周期全链路解析:从架构基石到高效推理
开发语言·人工智能·python·语言模型·架构·transformer
weixin_4460235613 小时前
C语言过时了?2026年C3和Zig谁能拯救它
c语言·zig·c3·系统级开发·语言革新
疯狂打码的少年13 小时前
单向循环链表 + 尾指针:让插入删除更高效的秘密武器
数据结构·python·链表
bike兔兔14 小时前
Python实现CSV文件转Excel,一键格式转换办公小脚本
开发语言·windows·python
菜菜的顾清寒14 小时前
Leetcode (18) 力扣100 矩阵置零
算法
董董灿是个攻城狮14 小时前
5分钟搞懂微调的能力退化问题
算法
XMYX-014 小时前
goroutine 为什么没有返回值?(Go 并发核心设计思想)
开发语言·golang
三棱球14 小时前
Java 基础教程 Day2:从数据类型到面向对象核心概念
java·开发语言
广州山泉婚姻14 小时前
C语言循环结构精讲:底层认知与实用技巧
c语言·人工智能