[C语言]C语言解决汉罗塔问题(初学者版)

article/2025/6/16 8:16:24

目录

1、汉罗塔问题解决思路:

2、代码实现:

函数部分:

全部代码:

运行结果:

3、结语:


1、汉罗塔问题解决思路:

以三个为例,步骤为:

1.首先我们需要将其分成两个整体;

2. 然后记AC(1)=1,(1)表示最上面第一个的圆盘,AC表示从A移动至C,AC(1)表示将最第一大的一个圆盘从A移动至C;

3.具体操作:

       a.我们需要计算的是AC(3)的步数;

       b. AC(3)=AB(2)+AC(1)+BC(2);

       c.AB(2)=AC(1)+AB(1)+CB(1);

       d.BC(2)=BA(1)+BC(1)+AC(1);

       f.AC(3)=AC(1)+AB(1)+CB(1)+AC(1)+BA(1)+BC(1)+AC(1)=7;

所以将最上面三个从A移动至C最少总共需要7步;

假如有n个圆盘:

   AC(n)=AB(n-1)+AC(1)+BC(n-1);

2、代码实现:

函数部分:

int AB(int n)//n为最上面的圆盘数,AB表示从A移动到B;
{if (n == 1){return 1;//最上面的一个圆盘从A移动到B需要1步;}return AC(n - 1) + AB(1) + CB(n - 1);//AB(n)=AC(n - 1) + AB(1) + CB(n - 1)
}int AC(int n)//类似与上解释
{if (n == 1){return 1;//}return AB(n - 1) + AC(1) + BC(n - 1);
}
int BA(int n)//类似与上解释
{if (n == 1){return 1;}return BC(n - 1) + BA(1) + CA(n - 1);//类似与上解释
}
int BC(int n)//类似与上解释
{if (n == 1){return 1;}return BA(n - 1) + BC(1) + AC(n - 1);
}
int CB(int n)//类似与上解释
{if (n == 1){return 1;}return CA(n - 1) + CB(1) + AB(n - 1);
}
int CA(int n)//类似与上解释
{if (n == 1){return 1;}return CB(n - 1) + CA(1) + BA(n - 1);
}

全部代码:

#include<stdio.h>
int AB(int n);
int AC(int n);
int BA(int n);
int BC(int n);
int CA(int n);
int CB(int n);
int main()
{int n = 4;//有四个圆盘printf("%d", AC(n));//打印结果
}
int AB(int n)
{if (n == 1){return 1;}return AC(n - 1) + AB(1) + CB(n - 1);
}int AC(int n)
{if (n == 1){return 1;}return AB(n - 1) + AC(1) + BC(n - 1);
}
int BA(int n)
{if (n == 1){return 1;}return BC(n - 1) + BA(1) + CA(n - 1);
}
int BC(int n)
{if (n == 1){return 1;}return BA(n - 1) + BC(1) + AC(n - 1);
}
int CB(int n)
{if (n == 1){return 1;}return CA(n - 1) + CB(1) + AB(n - 1);
}
int CA(int n)
{if (n == 1){return 1;}return CB(n - 1) + CA(1) + BA(n - 1);
}

运行结果:

 将四个圆盘A移动至C的最少步骤为15步;

3、结语:

这种算法最重要的是将繁化成简;整体思想很重要;

 


http://chatgpt.dhexx.cn/article/afCpmFmx.shtml

相关文章

汉诺塔问题的详细讲解(python版)

2022.3.17 2022.11.15 增加次数计算一&#xff0e;抽象为数学问题&#xff1a; 从左到右有A、B、C三根柱子&#xff0c;其中A柱子上面有从小叠到大的n个圆盘&#xff0c;现要求将A柱子上的圆盘移到C柱子上去&#xff0c;期间只有一个原则&#xff1a;一次只能移到一个盘子且大…

Golang 汉罗塔问题

先用一般方法实现汉罗塔方法: 先确定三个"石柱" A B C 。n代表A柱起始圆盘数量 主函数: 结合栈来实现汉罗塔。 因为栈先进后出的特点 很适合汉罗塔。其实和上述方法本质一样,只不过添加了 栈的特性 这里定的栈最大容量为7,可以根据实际情况更改 栈的构造&#xff…

汉罗塔(递归分治)

Java代码如下 public class Hanoi {//操作步骤数private static int steps 1;public static void main(String[] args) {//盘子数目int diskNumber 4;doTowers(diskNumber, A, B, C);}private static void doTowers(int diskNum, char from , char via, char to){if (diskNum…

汉诺塔(Hanoi)问题,Java实现,C语言实现,Python实现!!!

目录 一、汉诺塔的玩法 二、汉诺塔的逻辑 三、代码实现 四、运行结果 五、总结 一、汉诺塔的玩法 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#x…

Java基础语法(汉罗塔)

Java基础语法&#xff08;汉罗塔&#xff09; 1 起源2 需求3 分析3.1 1个碟子3.2 2个碟子3.3 3个碟子3.4 4个碟子3.5 规律 4 代码实现&#xff1a;直接算法5 代码实现封装&#xff1a;栈的思想 1 起源 汉罗塔&#xff08;又称河内塔&#xff09;问题是源于印度一个古老传说的益…

《经典递归问题:汉罗塔》

&#x1f320;作者&#xff1a;TheMythWS. &#x1f386;专栏&#xff1a;《JavaSE》 &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 目录 ✨汉罗塔的介绍 图解游戏​ ✨N层汉罗塔需移动的次数 ✨汉罗塔的…

数据链路层 功能概述

数据链路层的研究思想 数据链路层基本概念 数据链路层功能概述 数据链路层功能概述

数据链路层功能概述、封装成帧与透明传输

你一定要做自己&#xff0c;做自己喜欢的事&#xff0c;然后把自己交给命运 文章目录 本章启航思维导图数据链路层数据链路层基本概念数据链路层功能概述封装成帧透明传输组帧的四种方法字符计数法字符填充法零比特填充法违规编码法 本章启航思维导图 数据链路层 数据链路层基…

【计算机网络】数据链路层——数据链路层功能/组帧/差错控制

文章目录 数据链路层数据链路层的功能为网络层提供服务链路管理帧定界、帧同步与透明传输流量控制 组帧字符计数法字符填充的首尾定界符法零比特填充的首尾标志法违规编码法 差错控制检错编码奇偶校验码循环冗余码 纠错编码 数据链路层 数据链路层的功能 数据链路层在物理层提…

19数据链路层的功能

1、数据链路层的功能 数据链路层在物理层提供服务的基础上向网络层提供服务&#xff0c;其主要作用是加强物理层传输原始比特流的功能&#xff0c;将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路&#xff0c;使之对网络层表现为一条无差错的链路。 2、为网络层…

计算机网络——数据链路层功能概述、封装成帧、差错控制、流量控制与可靠传输机制

文章目录 前言一、数据链路层功能概述二、封装成帧1、透明传输2、封装成帧3、组帧的方法⑴字符计数法⑵字符/节填充法⑶零比特填充法⑷违规编码法 三、差错控制1、差错由来2、检错编码⑴奇偶校验码⑵循环冗余码 3、纠错编码——海明码 四、流量控制与可靠传输机制1、停止等待协…

计算机网络【数据链路层的功能】

计算机网络【数据链路层的功能】 数据链路层基本概念数据链路层功能概述封装成帧透明传输字符计数法字符填充法零比特填充法 差错控制差错从何而来&#xff1f;CRC 循环冗余码 数据链路层基本概念 数据链路层使用的信道主要有一下两种类型&#xff1a; 点对点信道&#xff1a…

数据链路层主要功能

透明传输 个人理解&#xff0c;透明传输其实就是指无论是什么报文都可以传输&#xff0c;非透明传输就是指某些特殊字符不能传输&#xff0c;在计算机网络中&#xff0c;透明传输在数据链路层提到过&#xff0c;在数据链路层将网络层协议封装成帧时&#xff0c;会在首部和尾部分…

数据链路层(内容超多哦)

数据链路层——交换机 1. 数据链路概述2. 以太网2.1 以太网帧格式2.2 交换机设备简介2.3 交换机的工作原理2.4 交换机以太网的工作模式2.5 配置前的准备 3. 命令行的使用 1. 数据链路概述 数据链路层的功能&#xff1a;1.数据链路的建立、维护与拆除 2.帧包装、帧传输、帧同步…

计算机网络:数据链路层功能

文章目录 1.为网络层提供服务2.链路管理3.帧定界、帧同步与透明传输4.流量控制5.差错控制 数据链路层在物理层提供服务的基础上向网络层提供服务&#xff0c;其主要作用是加强物理层传输原始比特流的功能&#xff0c;将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据…

计算机网络-数据链路层功能概述

数据链路层的研究思想 基本概念 结点: 主机, 路由器 链路: 网络中两个结点之间的物理通道, 链路的传输介质主要有双绞线, 光纤 和微波, 分为有线链路和无线链路 数据链路: 网络中两个结点的逻辑通道, 把现实控制数据传输协议的硬件和软件加到链路上就构成了数据链路 帧: 链…

第三章:数据链路层(一)

数据链路层基本概念 结点:主机、路由器 链路:网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。 数据链路&#xff1a;网络中两个结点之间的逻辑通道&#xff0c;把实现控制数据传输协议的硬件和软件加到链路上就构…

随机信号的特征—(自相关函数\互相关函数、协方差矩阵、相关矩阵\相关系数矩阵\相关系数)

在学习概率统计之前&#xff0c;我学习的都是确定的函数。概率统计讨论了一次取值时获得的值是不确定的&#xff0c;而随机过程讨论了不确定会发生哪个时间函数。 每个x(t)函数(样本函数)就是实际发生的一个表达式确定的函数&#xff0c;对每个x(t)的处理&#xff0c;都是与之…

使用 VPN 你一定要了解这几个真相!

关注公众号&#xff0c;回复“1024”获取2TB学习资源&#xff01; 什么是 VPN&#xff1f; VPN 是一种隐藏您的Internet 协议 (IP) 地址的服务。这使您可以匿名浏览互联网&#xff0c;因为没有人可以将您的数据链接到您的IP地址。 要了解VPN的作用&#xff0c;您只需分解“虚拟…

苹果Mac电脑L2TP连接公司内部网络失败解决方案

苹果Mac电脑L2TP连接公司内部网络 苹果Mac电脑的L2TP连接公司内部网络失败是一种常见的问题&#xff0c;可能会导致用户无法访问公司内部资源。以下是一些可能的解决方案&#xff0c;可以尝试解决这个问题&#xff1a; 检查网络连接&#xff1a;首先要确保你的Mac电脑已经连接…