APP下载

算法编程在计算思维能力培养中的应用

2021-05-23李茜

教育·校长参考 2021年1期
关键词:表达式凶手运算

李茜

什么是计算思维?

所谓“计算思维”,也就是计算机解决问题的思维,计算思维是人解决问题思维的一种抽象化。例如,计算机把我们日常生活中需要依据条件判断进而做出决定的问题抽象为分支结构,将需要重复做的事情抽象为循环结构,这样一来,许多现实生活中我们所遇到的问题,或者种类相似的问题,都可以通过计算思维的转换,抽象为计算机语言所编写出来的程序。

为什么要学习算法?

算法是计算机解决特定问题的确定的、有限的步骤的集合,无论学习哪门计算机语言,学习算法都是非常重要的,不同的算法体现了计算机思维的不同呈现方式,学习算法,对于学生理解计算思维,应用计算思维解决问题都是非常有帮助的。

算法举例

递归算法 递归算法是常用的编程技术,其基本思想就是“自己调用自己”,它可以用简单的程序来解决某些复杂的计算问题。在程序设计中,应用递归算法的关键即是找到递归的规律和递归终止的条件。

案例:数字黑洞153

任意取一个是3的倍数的自然数。求出这个数各个数位上数字的立方和,得到一个新数;然后再求出这个新数各个数位上数字的立方和,又得到一个新数,如此重复运算下去,最后一定会掉入数字黑洞153之中。例如:69是3的倍数,63+93=945,93+43+53=918,93+13+83=1242,13+23+43+23=81,83+13= 513,53+13+33=153。

接下来,我们来看,如何通过算法描述来说明计算机解决问题的思维方式。

算法如下:一是提示用户输入一个3的倍数。二是求这个数各个数位的立方和。三是判断结果是否等于153?四是如果不等于153则重复2、3两步,如果等于153,则证明其掉入黑洞153,程序结束。

这个过程和我们人脑判断这个问题的过程非常相似,而以上描述的算法就是一个从人的思维到计算思维转换的过程。

枚举算法 枚举算法是我们在日常中常用一个算法,它的核心思想就是尝试所有的可能。它的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:一是可预先确定候选答案的数量。二是候选答案的范围是已知的、明确的。

案例:韩信点兵

秦朝末年,楚汉相争。一次,韩信率1500名将士与楚王大将李锋交战后返回大本营。当行至一山坡,忽有后军来报,说有楚军骑兵追来。韩信兵马到坡顶,见来敌不足500骑,便急速点兵迎敌。他命令士兵3人一排,结果多出2名;接着命令士兵5人一排,结果多出3名;他又命令士兵7人一排,结果又多出2名。韩信马上向将士们宣布:我军有1073名勇士,敌人不足500,我们居高临下,以众击寡,一定能打败敌人。

这是一个典型的枚举算法的案例。从对韩信点兵这个问题分析得出:

枚举的范围是:1000—1500。

条件是:一是士兵数除3的余数为2;二是士兵数除5的余数为3;三是士兵数除7的余数为2。三个条件必须同时满足。

算法如下:一是列舉1000—1500范围内的所有数字。二是按照“兵除3的余数为2;兵除5的余数为3;兵除7的余数为2”的条件逐一判断。三是找到符合条件的数字立即停止判断。

枚举法的应用非常广泛,很多数学问题都可以用枚举法来实现,例如鸡兔同笼等等。

逻辑推理 在计算思维的世界里,除了算术运算、关系运算,还有一种运算叫“逻辑运算”,逻辑运算符有三种:非、与、或。计算机在处理问题时,除了要处理和运算有关的问题,还要处理逻辑判断类的问题。

案例:谁是杀手

日本某地发生了一起谋杀案,被控制的四个犯罪嫌疑人分别说了如下供词:

甲说:“不是我。”乙说:“是丙。”丙说:“是丁。”丁说:“丙在胡说。”已知三个人说了真话,一个人说的是假话。现在根据这些信息,请你找出到底谁是凶手。

现在,我们需要编写一个程序,让程序帮我们判断出“谁是凶手”。那么,我们需要将问题转化为计算机可以理解的形式。

首先,我们将嫌犯的陈述,对应为下方的逻辑表达式:

已知条件:甲说:“不是我。”表达式:<杀手=1>不成立。

已知条件:乙说:“是丙。”表达式:<杀手=3>。

已知条件:丙说:“是丁。”表达式:<杀手=4>。

已知条件:丁说:“丙在胡说。”表达式:<杀手=4>不成立。

接下来,是如何表达四个人中有三个人说了真话,也就是以上的四个表达式返回值之和等于3。

算法如下:一是假设凶手=1。二是判断上方表达式中4个表达式的和是否为3。三是如果成立,则找到凶手,说出凶手。四是如果不成立,则凶手值加1,重复步骤2、3。五是当凶手=4,四个嫌犯都判断完毕,凶手就在其中。

遇到类似的问题,我们需要做的,就是把已知条件和条件之间的关系表达清楚,其他的问题就交给计算机来处理。

笔者的话

生活中的很多问题都可以通过计算思维抽象成为具体的形式:如不断变化的数值可以抽象为变量;能否满足条件可以抽象为逻辑表达式;对事物的判断可以抽象为分支结构,反复做的事情可以抽象为循环结构等等。拥有较强计算思维能力的学生,具备更强大的解决问题的能力,当在生活中遇到一些难以解决的问题时,往往会想到借助计算机编写程序的方式来找到问题的答案。本文中笔者以算法编程为背景,通过几个编程案例,呈现了分析问题→思维转换→程序实现的过程,体会现实生活中的问题如何抽象并转换成为能够为计算机理解的应用程序的过程,进而感受计算思维的魅力。

(作者单位:首都师范大学附属育新学校)

猜你喜欢

表达式凶手运算
处死“凶手”
灵活选用二次函数表达式
长算式的简便运算
第二个凶手
加减运算符号的由来
“整式的乘法与因式分解”知识归纳
真正的凶手
寻找勾股数组的历程
谁是凶手
议C语言中循环语句