算法案例备课资料例题解析【例1】输入两个正整数a和b(a>b),求它们的最大公约数
解析:求两个正整数a、b(a>b)的最大公约数,可以归结为求一数列:a,b,r1,r2,…,rn-1,rn,rn+1,0此数列的首项与第二项是a和b,从第三项开始的各项,分别是前两项相除所得的余数,如果余数为0,它的前项rn+1即是a和b的最大公约数,这种方法叫做欧几里得辗转相除法,其算法如下:S1输入a,b(a>b);S2求a/b的余数r;S3如果r≠0,则将b→a,r→b,再次求a/b的余数r,转至S2;S4输出最大公约数b
伪代码如下:10Reada,b20r←mod(a,b)30Ifr=0thenGoto8040Else50a←b60b←r70Goto2080Printb流程图如下:点评:算法的多样性:对于同一个问题,可以有不同的算法
例如求1+2+3+…+100的和,可以采用如下方法:先求1+2,再加3,再加4,一直加到100,最后得到结果5050
也可以采用这样的方法:1+2+3+…+100=(1+100)+(2+99)+(3+98)+…+(50+51)=50×101=5050
显然,对于算法来说,后一种方法更简便,而循环累加更适用于计算机解题
因此,为了有效地进行解题,不仅要保证算法正确,还要选择好的算法,即方法简单、运算步骤少,能迅速得出正确结果的算法
【例2】求1734,816,1343的最大公约数
分析:三个数的最大公约数分别是每个数的约数,因此也是任意两个数的最大公约数的约数,也就是说三个数的最大公约数是其中任意两个数的最大公约数与第三个数的最大公约数
解:用“辗转相除法”
先求1734和816的最大公约数,1734=816×2+102;816=102×8;所以1734与816的最大公约数为102
再求102与1343的最大公约数,1343=102×13+17;102=