图书简介:
目 录
问题1 数的划分 1
游戏 2
问题 2
算法和程序 4
进一步思考 4
问题2 移棋子 6
游戏 7
问题 7
算法 9
程序 10
进一步思考 11
问题3 奇妙的整除性 13
游戏 14
算法和程序 14
进一步思考 17
问题4 逃不掉的“3” 19
游戏 20
问题 20
算法和程序 21
进一步思考 23
问题5 窍门在哪里 25
问题 26
算法和程序 26
进一步思考 28
问题6 满铺方式有几种 29
游戏 30
问题 30
算法和程序 32
进一步思考 35
问题7 两根一组 38
游戏 39
问题和算法 39
程序 41
进一步思考 43
问题8 填数字 44
游戏 45
问题 45
算法和程序 48
进一步思考 49
问题9 猫和老鼠 51
游戏 52
问题 52
算法和程序 53
进一步思考 55
问题10 哪条路最快 57
游戏 58
问题 58
算法和程序 61
进一步思考 63
问题11 三角形、方形和圆形 64
游戏 65
问题和分析 65
算法和程序 71
进一步思考 72
问题12 直角三格骨牌的满铺 74
游戏 75
问题和分析 75
算法和程序 77
进一步思考 79
?
问题13 九宫格游戏 81
游戏 82
问题和分析 82
算法和程序 87
进一步思考 90
问题14 二维顺序表的搜索 93
游戏 94
问题和分析 94
算法和程序 97
进一步思考 98
问题15 三堆火柴 99
游戏 100
问题 100
算法 102
程序 103
进一步思考 104
问题16 殊途同归 106
游戏 107
问题和分析 107
算法和程序 109
进一步思考 110
问题17 狐狸和野兔 111
游戏 112
问题和分析 113
算法和程序 116
进一步思考 117
问题18 翻转玻璃杯 119
游戏 120
问题和分析 120
算法和程序 128
问题19 灯之圈 130
游戏 131
问题和分析 131
算法和程序 134
进一步思考 137
问题20 青蛙和蟾蜍 139
游戏 140
问题和分析 140
算法和程序 145
问题21 幻方 148
游戏 149
问题 149
算法和程序 150
问题22 一维跳棋 159
游戏 160
问题和分析 160
算法和程序 164
进一步思考 166
问题23 图着色 168
游戏 169
问题 169
算法和分析 171
程序 176
进一步思考 177
问题24 骨牌满铺 178
游戏 179
问题和分析 179
算法和程序 184
进一步思考 187
问题25 15谜题 190
游戏 191
问题和分析 191
算法和程序 195
进一步思考 198
问题26 天平称重 200
游戏 201
问题和分析 201
算法和程序 205
进一步思考 207
问题27 病毒传播 210
游戏 211
问题和分析 212
算法和程序 214
进一步思考 216
问题28 分形 217
游戏 218
问题和分析 219
算法和程序 220
进一步思考 224
问题29 微信游戏 227
游戏 228
问题和分析 228
算法和程序 233
进一步思考 235
问题30 应付多少钱 236
游戏 237
问题和分析 238
算法和程序 240
进一步思考 244
问题31 色块消除 245
游戏 246
问题和分析 247
算法和程序 250
进一步思考 253
?
问题32 公平游戏 255
游戏 256
问题和分析 256
算法和程序 262
进一步思考 264
参考文献 268
展开
前 言
从一些经典的益智游戏或挑战出发,见识(熟悉)和体会计算思维(主要是其中的逻辑思维和算法思维)的若干重要观念和要点,是本书编写的初衷和追求。
为什么从游戏出发?首先,那些小学生也能理解的游戏可以算是“真实问题”的一类,它们通常能够展现出某种引人入胜的挑战;同时,那些游戏通常具有清晰界定的情境、规则、目标三要素,便于进行直入问题核心的讨论,而不被一些模糊和不确定性信息困扰,这对于初学者是重要的。
我们挑选了32个游戏或挑战。它们本身相互独立,读者可以以任意顺序阅读,没有前后依赖关系。在铺陈样式上,基于学习和体会计算思维观念和要点的目标,结合每个游戏的讨论,我们都将大致遵循如下脉络。
游戏(或挑战):关于日常所见的一个具体的游戏的描述,也就是情境、规则和目标,应该是小学高年级学生可以看懂并尝试应对挑战的。根据情况,我们进行针对性的讨论,但不一定直接给出“成功”或者“取胜”的法则。
问题:对该游戏的一般化推广,现在也称为“泛化”。它的意思是,在前面具体游戏描述的时候,情境通常是固定规模的,如“一个 的棋盘”“3对棋子”之类。一般化就是要考虑解决“一个 的棋盘”“m对棋子”的问题,其中n和m可以是任意给定的。计算思维就是应对这种问题的挑战,或者得出某种“通解”。
对于所形成的问题(也就是一般化的游戏),在分析的过程中,有可能但不一定(因此图中用的是虚线)会得到一些数学或逻辑上的性质和关系,以指导游戏的玩法。所需的数学知识和逻辑分析能力为中学生认知水平的程度。
算法:一些步骤,就是游戏成功的玩法。可能借助前面得到的数学性质,也可能直接就是某种机智的体现。根据适当和方便,描述的方式可能是自然语言或伪代码,简单情况下也可以是Python语句。其中,除了会用到顺序、分支和循环过程的表达,还会涉及算法思维(计算思维的一个方面)的一些典型策略或途径。这部分还可能讨论效率,即为了解决问题所需要执行的算法步骤的次数。
程序:算法的一种计算机程序实现,它的运行将展示该游戏进行的过程。由于程序文本也可以看成算法的一种描述,在简单的情况下,程序可能随着算法给出。对于复杂一些的,在正文中,为避免赘述,我们只是讨论一些有特别价值的要点,而在附录中提供有可运行的完整程序。在讨论程序的时候,我们会特别在意“信息 → 数据”的安排,即关于游戏的描述通常给出的都是关于情境、规则和目标的信息,为了程序的处理,需要将它们表示为计算机中的数据,即所谓“信息的数据表示”。其中也可能有多种选择,于是也就有优劣或不同特点之分。
21世纪以来,随着科学技术尤其是信息科技在经济社会生活中发挥的作用越来越大,科普事业得到重视,涌现了不少优秀的科普作品。与本书相关的是一些数学或算法方面的普及读物。参考文献部分列出了一些对编写本书有重要影响的图书。事实上,本书用到的游戏的原型许多就是取材于其中的文献。不同的是,我们采用了一种面向问题求解、提炼和展示计算思维要点的融会贯通方式。其中可能涉及一点数学,但不是为了学数学,而是为了帮助理解算法;涉及算法,但目标不是为了学会那些算法,而是以算法的讨论为载体,让读者体会和培养计算思维的观念、要点。
这里一个重要的问题是例子的选择以及从中对计算思维要素的提炼。如何选择一组例子,除了保证有趣、难度合适,还应该追求它们总体上能够对目标——计算思维的观念和要点——做到适当或优化覆盖。这是一个很有挑战的任务,我们在书中做了些努力,如追求例子的多样性和对重要观念的反复强调,但鉴于我们的视野、水平和功力,肯定还有很大的改进空间。相信一定会有读者能提出更好的例子组合,以及对书中例子更恰当的处理方式,那将是十分令人向往的。
李晓明
于大湾区大学 2025年10月
展开