三、简单算法举例
为了理解如何设计算法,下面举几个算法的简单例子。
[例1] 有两个杯子A和B,分别盛有果汁和酒,要求将这两个杯子进行互换。
(请学生回答,并要求说清楚明确的步骤)
学生所回答的步骤就是算法的描述:
根据常识,必须增加一个空杯C作为过渡。
其算法表示
步骤1:先将A杯中的果汁倒在C杯中;
步骤2:再讲B杯中的酒倒在A杯中;
步骤3:最后将C杯中的果汁倒在B杯中。
此问题可以抽象为数值运算中的交换两个变量的值,简化为:
①A → C
②B → A
③C → B
[例2] 从十个数中挑选出最大的数。
创设情景:这个问题的思路可以用“打描台”来比喻。第一个同学先上讲台,然后第二个同学上去比试,胜者(个子高的)留在讲台上,依次轮流,一直到第十个人比完为止()一共九次)最后留在讲台上的同学就是胜者(个子最高的同学)。
算法描述:
1.先任选一个数放在变量A中;
2.将第二个数与变量A中的数进行比较,大者放在变量A中;
3.再将第三个数与变量A中的数进行比较,大者放在变量A中;
10.最后将第十个数与变量A中的数进行比较,大者放在变量A中。
这样写算法虽然正确,但是太烦琐了,可以简化为如下:
1.数X → A,计数器 0 → N;
2.下一个数Y与A比较,大者→ A;
3.N + 1 → N;(增加一次比较次数)
4.若N ? 9,执行第2步,否则停止循环,此时A中的数最大。
显然,用“循环”表示的算法比较简练。
如果题目要求改为“从1000个数中挑选最大者”,只许需要将算法里面的第4步中的“9”改为“999”即可。
[例3] 求两个正整数m和n的最大公约数。
解题之前介绍“辗转相除法”求最大公约数的方法。“辗转”就字面意思来讲是翻来覆去的意思,因此“辗转相除法”的格式可以形象地表示为:
将m和n赋具体值,m = 60,n = 14,板书具体求解方法。
用m 作被除数, n 作除数,r 做余数。
具体方法(算法)为:
①求m/n的余数r;
②若r = 0 ,则n为最大公约数,若r ≠ 0,执行第③步;
③将n → m,将r → n中;
④返回重新执行第①步。
注意:如果事先不知道M,N两个数谁大谁小,应(可)在第一步之前增加一个步骤,比较一下两个数的大小,大数在m中,小数在n中。