Hanoi塔问题

简介: 说明:河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。

 

说明:河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年法国数学家 Edouard Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,是由三支钻石棒(Pag)所支撑,开始时神在第一根棒上放置64个由上至下依由小至大排列的金盘(Disc),并命令僧侣将所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日来临之时。

解法:如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如果盘数超过2个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,其实就是进入程式的递回处理。事实上,若有n个盘子,则移动完毕所需之次数为2^n - 1,所以当盘数为64时,则所需次数为:264- 1 = 18446744073709551615为5.05390248594782e+16年,也就是约5000世纪,如果对这数字没什幺概念,就假设每秒钟搬一个盘子好了,也要约5850亿年左右。

#include <stdio.h>
void hanoi(int n, char A, char B, char C) {
    if(n == 1) {
        printf("Move sheet %d from %c to %c\n", n, A, C);
    }
    else {
        hanoi(n-1, A, C, B);   //将A上编号为1至n-1的圆盘移到B,C作辅助塔
        printf("Move sheet %d from %c to %c\n", n, A, C);
        hanoi(n-1, B, A, C);   //将B上编号为1至n-1的圆盘移到C,A作辅助塔
    }
}

int main() {
    int n;
    printf("请输入盘数:");
    scanf("%d", &n);
    hanoi(n, 'A', 'B', 'C');
    return 0;
} 

 

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

相关文章
|
4月前
|
人工智能 程序员 定位技术
和AI谈恋爱指南:从尬聊到心有灵犀
想让AI理解你的需求?本文用最轻松有趣的方式教你掌握提示词工程,从小白到高手,让ChatGPT成为你最得力的助手。通过生动的类比和实战案例,轻松掌握与AI对话的艺术!
|
C# 安全 Windows
C# 判断用户是否对路径拥有访问权限
如何获取当前系统用户对文件/文件夹的操作权限?  1.获取安全信息DirectorySecurity DirectorySecurity fileAcl = Directory.GetAccessControl(folder); 通过Directory.
2174 0
|
2月前
|
人工智能 自然语言处理 数据可视化
多模态AI重构科研范式:从"读文献"到"理解世界"
2025年,多模态AI正重塑科研:可同时理解文字、图像、公式等,实现文献智能解析、数据自动提取与跨学科融合,大幅提升研究效率。AI助力科研进入“人机协同”新时代,释放创造力,推动知识发现跃迁。
多模态AI重构科研范式:从"读文献"到"理解世界"
|
2月前
|
缓存 数据可视化 定位技术
快递鸟快递API技术指南:获取物流轨迹信息与轨迹地图的解决方案
在当今电商竞争激烈的环境中,物流体验已成为提升用户满意度的关键因素。研究表明,超过 75% 的消费者会因物流信息不透明而放弃下单。
478 1
|
4月前
|
C++
什么是单项式
单项式是代数式中的一种
|
10月前
|
机器学习/深度学习 算法 Serverless
基于Itô扩散过程的交易策略偏微分方程matlab求解与仿真
本程序基于Itô扩散过程的交易策略偏微分方程,确定了Itô扩散过程,并推导出交易长度的分布和密度函数,计算预期交易频率。核心代码在MATLAB2022A上运行,展示了交易策略的概率分布及卷积结果。算法原理涉及金融衍生品定价与风险管理,利用随机微分方程建模资产价格动态,求解相关偏微分方程以确定最优交易策略。
|
12月前
|
存储 人工智能 算法
深度揭秘超长序列生成任务训练技术
阿里自研的TorchAcc训练引擎提出了超长序列训练方案FlashSequence,针对超长文本理解、视频生成等场景。通过2D Context Parallel和Hybrid FSDP混合分布式策略,结合显存、计算和通信优化,实现了百万级别超长序列模型的高效训练。FlashSequence在算力、显存需求及分布式训练方面进行了多项创新,性能提升显著,最大可达48%。该方案大幅降低了企业创新成本,提升了业务应用的可能性。
|
12月前
|
存储 自然语言处理 搜索推荐
校园社交圈子系统网站 校园社交圈子系统用户注册与登录 校园社交圈子系统信息发布与审核 校园社交圈子系统搜索功能优化 校园社交圈子系统数据存储与处理
校园社交圈子系统网站是面向大学生的在线社交平台,提供用户注册与登录、信息发布与分享、搜索与发现、数据存储与处理等功能。用户可通过手机号、邮箱或第三方账号注册登录,发布多种信息并接受审核。平台优化了搜索功能,支持关键词和高级搜索,确保信息质量和安全性。数据存储采用分布式数据库和主从复制技术,保障数据安全与高效处理。
313 3
|
11月前
|
监控 算法 Linux
高效可靠的处理器微体系结构性能测量技术
本次分享的主题是高效可靠的处理器微体系结构性能测量技术,由华东师范大学系统优化实验室的博士研究生刘通宇分享。主要分为两个部分: 1. 关于Core PMU的工作 2. ARM架构下的的内存带宽质量问题
227 0