【蓝桥杯每日一练】 汉诺塔

目录

1.说明

2.解法

3.python实现

python全局变量使用方式:

python全局变量和局部变量的区别:


1.说明

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

2.解法

设:A.B.C分别表示三根柱子;1,2,3分别表示三个圆盘,并且数字越大表示圆盘越大。

现在我们需要将A上的全部圆盘移动到C上

① 只有一个圆盘:1;A -> C

② 有两个圆盘:1、2;A-> B  A -> C  B-> C

③ 有三个圆盘:1、2、3;A-> C  A-> B  C-> B  A -> C  B-> A  B-> C  A-> C

观察上面的结果发现:每次最重要的一步,就是将A中最大的圆盘移动到C上。

①将1:A->C

②将2:A->C

③将3:A->C

观察③:加粗A->C以上部分和以下的部分,我们可以发现其实过程和②完全相似。对于上面的部分:是将1.2两个圆盘从起点A移动到终点B;对于下面的部分:是将1.2两个圆盘从起点B移动到终点C(对于②:是将1.2两个圆盘从A移动到C)。因此③中的过程,完全可以重复②的过程实现。

3.python实现

#1 汉诺塔
def move(n, a, b, c):if n==1:print (a,'-->',c)returnelse:move(n-1,a,c,b)  #首先需要把 (N-1) 个圆盘移动到 bmove(1,a,b,c)    #将a的最后一个圆盘移动到cmove(n-1,b,a,c)  #再将b的(N-1)个圆盘移动到cmove(3, 'A', 'B', 'C')

返回:

 这样看是不是还不够清楚,我觉得加一个总移动次数就更完美了

count = 0
def move(n, a, b, c):global countif n==1:print (a,'-->',c)count = count + 1returnelse:move(n-1,a,c,b)  #首先需要把 (N-1) 个圆盘移动到 bmove(1,a,b,c)    #将a的最后一个圆盘移动到cmove(n-1,b,a,c)  #再将b的(N-1)个圆盘移动到cmove(3, 'A', 'B', 'C')
print('总移动次数为',count)

返回:

但是,在这里,得定义次数 count 为全局变量才可以哦!!!

python全局变量使用方式:

第一种:是在一个单独的模块中定义好,然后在需要使用的全局模块中将定义的全局变量模块导入。

第二种:直接在当前的模块中定义好,然后直接在本模块中通过global声明,然后使用。

python全局变量和局部变量的区别:

对于作用域,全局变量在整个py文件中声明,全局范围内可以使用。

局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围,则会报错。

在函数内部,如果局部变量与全局变量变量名一样,则优先调用局部变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XPath详解教程

目录 1. XPath 概览 2. XPath 常用规则 3. 准备工作 4.实例引入 5.所有节点 6. 子节点 7.父节点 8.属性匹配 9.文本获取 10.属性获取 11.属性多值匹配 12. 多属性匹配 13.按序选择 14. 节点轴选择 结语 1. XPath 概览 XPath 全称 XML Path Language ,即 XML 路径语言…

【蓝桥杯每日一练】 斐波那契数列

目录 1.说明 2.原理 3.python实现 第一种: 第二种: 第三种 第四种 1.说明 Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免…

C语言二级指针

指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。 如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。 假设…

R 安装详解

目录 1.R软件 的下载 1.1 R下载 1.2 RStudio下载 2.辅助软件 notepad 3.R 扩展软件包的安装与管理 4.基本 R 软件的用法 1.基本运行 2.项目目录 5.RStudio 软件 1.介绍 2.项目 3.帮助 4.使用历史命令 5.放大显示某一窗格 6.运行程序 7.中文编码问题 8.Rmd 文件 …

R 基础入门(1)

目录 一、四则运算 练习: 二、数学函数 1.数学函数——平方根、指数、对数 2.数学函数——取整 3.数学函数——三角函数 4.数学函数——反三角函数 5.分布函数和分位数函数 三、输出 1.简单输出 2.用 sink() 函数作运行记录 练习 四、向量计算与变量赋值…

C语言二维数组指针

二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。 以二维数组 a 为例: int a[3][4] { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };从概念上理解,a 的分布像一…

R 基础入门(2)

目录 一、绘图 1.曲线图 curve() 函数 2.加参考线 abline() 3.条形图 barplot() 4.散点图 plot() 练习: 二、读取csv文件 1.表格数据 2.读入表格数据 3.分类变量频数统计 4.数值型变量的统计 三、调用自定义函数 一、绘图 1.曲线图 curve() 函数 用 …

【蓝桥杯每日一练】 巴斯卡三角形(杨辉三角形)

目录 1.说明 ​2.python实现 1.说明 巴斯卡三角形又叫杨辉三角,贾宪三角形 他有以下 性质: 前提:端点的数为1(这不是废话吗,头上那个端点不是1还是三角形吗) 1、每个数等于它上方两数之和。 2、每行数…

C语言多功能计算器

最近经过一段时间的C语言学习,我使用C语言制作了一个多功能计算器,想要给大家分享一下。 计算器设计流程 1 . 实现基本的加减乘除运算。 2 . 能够实现开方,立方,平方等复杂运算。 3 . 整体的界面展示,显示更加清晰易…

Kafka日志文件存储

日志文件 kafka在server.properties配置文件中通过log.dir属性指定了Kafka的日志存储路径 核心文件 1. log文件 实际存储消息的日志文件, 大小固定1G(参数log.segment.bytes可配置), 写满后就会新增一个新的文件, 文件名是第一条消息的偏移量 2. index文件 以偏移量为索引…

C语言颜色设置

C语言文字颜色和背景颜色设置 代码 #include <stdio.h> #include <stdlib.h>int main() {system("color 11") //背景色和文字颜色system("pause")&#xff1b;return 0; }如上代码是输出蓝色背景和蓝色文字。 在所需要改变窗口颜色的位置调…

因子分析——matlab

目录 一、起源 二、基本思想 三、算法用途 四、实例详解 1.读取数据 2.数据标准化 3.两种不同的做法 3.1 不用函数 3.2 factoran()法 4.对因子得分进行排序 5.对因子得分进行画图 一、起源 因子分析的起源是这样的&#xff1a;1904年英国的一个心理学家发现学生的英…

因子分析——python

目录 一、起源 二、基本思想 三、算法用途 四、因子分析步骤 五、factor_analyzer库 四、实例详解 1.导入库 2.读取数据 3.充分性检测 3.1 Bartletts球状检验 3.2 KMO检验 4.选择因子个数 4.1 特征值和特征向量 4.2 可视化展示 4.3 可视化中显示中文不报错 5.因…

【蓝桥杯每日一练】 三色旗

目录 1.说明 2.解法 3.python实现 第一种 第二种 第三种 1.说明 三色旗的问题最早由E.W.Dijkstra所提出&#xff0c;他所使用的用语为Dutch Nation Flag(Dijkstra为荷兰人)&#xff0c;而多数的作者则使用Three-Color Flag来称之。 假设有一条绳子&#xff0c;上面有红…

熵权法 —— matlab

目录 一、熵权法介绍 二、熵权法赋权步骤 1.指标正向化 mapminmax介绍 2.数据标准化 3.计算信息熵 4.计算权重以及得分 三、实例分析 1.读取数据 2.指标正向化 2.1 越小越优型处理 2.2 某点最优型指标处理 3.数据标准化 4.计算信息熵 5.计算权重 6.计算得分 总…

熵权法 —— python

目录 一、熵权法介绍 二、熵权法赋权步骤 1.指标正向化 mapminmax介绍 2.数据标准化 3.计算信息熵 4.计算权重以及得分 四、实例分析 1.导入相关库 2.读取数据 2.指标正向化 2.1 越小越优型处理 2.2 某点最优型指标处理 3.数据标准化 4.计算信息熵 5.计算权重 6.…

R语言基础入门(3)之数据类型与相应运算1

目录 一、常量与变量 1.常量 2.变量 二、数据类型 三、数值型向量 3.1 c() 函数 3.2 length(x) 3.3 numeric() 四、向量运算 1.标量和标量运算 2.向量与标量运算 3.等长向量运算 4.不等长向量的运算 五、向量函数 1.向量化的函数 2.排序函数 3.统计函数…

C语言位运算详解

C语言位运算包括&#xff1a;按位与运算、或运算、异或运算、左移运算、右移运算。 位运算&#xff0c;就是对一个比特&#xff08;Bit&#xff09;位进行操作。比特&#xff08;Bit&#xff09;是一个电子元器件&#xff0c;8个比特构成一个字节&#xff08;Byte&#xff09;…

R语言基础入门(4)之数据类型与相应运算2

目录 一、逻辑型向量与比较运算 二、 逻辑运算 三、逻辑运算函数 一、逻辑型向量与比较运算 逻辑型是 R 的基本数据类型之一&#xff0c;只有两个值 TRUE 和 FALSE, 缺失时为 NA。逻辑值一般产生自比较&#xff0c;如sele <- (log10(15) < 2); print(sele) 返回&…

R语言基入门(5)之字符型数据及其处理

目录 1.字符型向量 2. paste() 函数 3.转换大小写 4.字符串长度 5.取子串 6. 类型转换 7. 字符串拆分 8.字符串替换功能 9.正则表达式 1.字符型向量 字符型向量是元素为字符串的向量。如s <- c(abc, , a cat, NA, 李明) s 返回&#xff1a; 2. paste() 函数 针对…