汉诺塔问题

简介: 汉诺塔问题一、问题      古代有一个梵塔,塔内有3个座分别为A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下面,小的在上面(如下图所示)。有一个老和尚想把这64个盘子,从A盘移动到C盘,但每次只允许移动一个盘子,且在移动过程中在3个座上都需要始终保持大盘在下面,小盘在下。

汉诺塔问题

一、问题

      古代有一个梵塔,塔内有3个座分别为AB,C,开始时A座上有64个盘子,盘子大小不等,大的在下面,小的在上面(如下图所示)。有一个老和尚想把这64个盘子,从A盘移动到C盘,但每次只允许移动一个盘子,且在移动过程中在3个座上都需要始终保持大盘在下面,小盘在下。在移动过程中可以利用B座,要求编程实现,打印出移动方案。

二、问题分析

1. 问题目标

将所有的盘子从A盘移动到C

2. 条件

A.每次只允许移动一个盘子;

B.在移动过程中,在3个座上都需要始终保持大盘在下面,小盘在下;

C.在移动过程中可以利用B座;

3. 编程目标

打印出移动方案

三、解法方案

1)将A座上n-1个盘子借助C座,先移动到B座上;

 

2)把A座上所剩下的最后一个盘子移动到C座;

 

3)将n-1个盘子从B座借助于A座,再移动到C座; 

四、解法方案

1.目前只考虑打印移动3个盘子的移动方案;

因为64个盘子,移动的步骤有264-1,该数目相当相当大;

2.盘子的编号是从上到下,进行编号,分别是1,2,3等;

五、源代码

#include <stdio.h>
int step = 1; //一个全局变量,表示目前正在移动盘子的是第几步
//移动函数,表示把第n个盘子从某一个座移动到另外一个座
void move(int n,char from, char to)
{
	printf("The NO. %d Step is to move disk %d from %c to %c.\n",step++,n,from,to);
}

// 借助于"two"座,将n个盘子从"one"座移动到"three"座
void hanno(int n,char two, char one, char three)
{
	if(1 == n)	
	{
		move(n,one,three);
	}
	else
	{
		hanno(n-1,three,one,two); // 借助于"three"座,将n-1个盘子从"one"座移动到"two"座
		move(n,one,three); // 将第n个盘子从"one"座移动到"three"座
		hanno(n-1,one,two,three); // 借助于"one"座,将n-1个盘子从"two"座移动到"three"座
	}

}

int main(void)
{
	int m;
	m = 3;

	printf("The step to moving %d diskes:\n",m);

	hanno(m,'B','A','C');
	return 0;
}

 

六、程序运行效果

相关文章
|
6月前
|
Linux 网络安全 iOS开发
SecureCRT & SecureFX 9.6.3 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
SecureCRT & SecureFX 9.6.3 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
1543 4
SecureCRT & SecureFX 9.6.3 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
|
人工智能 弹性计算 搜索推荐
打造个性化的微信公众号AI小助手:从人设到工作流程
在数字化时代,一个有个性且功能强大的AI小助手能显著提升用户体验。本文档指导如何在微信公众号上设置AI小助手“小智”,涵盖其人设、功能规划及工作流程设计,旨在打造一个既智能又具吸引力的AI伙伴。
1019 0
|
9月前
|
机器学习/深度学习 编解码 测试技术
RT-DETR改进策略【注意力机制篇】| WACV-2024 D-LKA 可变形的大核注意 针对大尺度、不规则的目标图像
RT-DETR改进策略【注意力机制篇】| WACV-2024 D-LKA 可变形的大核注意 针对大尺度、不规则的目标图像
238 2
RT-DETR改进策略【注意力机制篇】| WACV-2024 D-LKA 可变形的大核注意 针对大尺度、不规则的目标图像
|
10月前
|
监控 安全 调度
任务调度企业级场景下的新选择,兼容 XXL-JOB 通信协议
XXL-JOB 是一个开源的分布式任务调度平台,开箱即用、简单易上手,得到了很多开发者的喜爱。和其他中间件开源项目一样,当开发者把开源项目部署到公共云,应用到企业级场景中时,就会在稳定性、性能、安全、其他云产品间集成体验上提出更高的要求。基于此背景,阿里云微服务引擎 MSE 基于自研的分布式任务调度平台 SchedulerX,通过兼容 XXL-JOB 客户端的通信协议,在开源 XXL-JOB 版本的基础上,提升了稳定性、安全、性能、可观测等能力,满足企业客户的需求。此外,为方便测试,提供了一个月 400 元额度的免费试用和预付费首购 5 折、续费 6.5 折起的优惠。
495 171
|
缓存 NoSQL 安全
Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器 ,互斥锁
Redis缓存雪崩、击穿、穿透解释及解决方法,缓存预热,布隆过滤器 ,互斥锁
860 5
|
10月前
|
人工智能 前端开发 关系型数据库
过年啦,做一个春节贺卡生成器
本文介绍了如何获取和利用现有的大模型资源,结合魔笔低代码,低成本、高效率地打造一个 AI 春节贺卡生成器。
448 38
|
10月前
|
人工智能
TITAN:哈佛医学院推出多模态全切片病理基础模型,支持病理报告生成、跨模态检索
TITAN 是哈佛医学院研究团队开发的多模态全切片病理基础模型,通过视觉自监督学习和视觉-语言对齐预训练,能够在无需微调或临床标签的情况下提取通用切片表示,生成病理报告。
450 8
TITAN:哈佛医学院推出多模态全切片病理基础模型,支持病理报告生成、跨模态检索
|
10月前
|
机器学习/深度学习 运维 分布式计算
Pandas数据应用:异常检测
本文介绍如何使用Pandas进行异常检测,涵盖异常值定义及其对数据分析的影响。通过简单统计方法(如均值+3标准差)、箱线图法(基于四分位距IQR)和基于密度的方法(如DBSCAN),并提供代码案例。同时,针对数据类型不匹配、缺失值处理不当及大数据量性能问题等常见报错给出解决方案。掌握这些技术有助于提高数据分析的准确性和可靠性。
424 19
|
人工智能 算法 C++
C++在游戏开发中的应用与挑战
C++在游戏开发中扮演关键角色,常用于引擎开发、游戏逻辑与算法实现,以及跨平台和网络游戏开发。尽管面临学习曲线陡峭、内存管理复杂、跨平台兼容性及与其他技术集成的挑战,但通过学习和掌握现代C++特性,开发者能创造高效优质的游戏。