程序设计艺术学习笔记(1)

序言习题

(1).通过一系列的替代,将四个变量的值(a,b,c,d)变为(b,c,d,a),用最少的步骤

开门菜,然而还是有很多值得思考的地方。能帮助人理解计算机对于赋值的操作。通过观察,可以认为这是一个a[i]赋值给a[i-1]的操作。最少的步骤,只需要五步即可。需要一个t来作辅助,t=a,a=b,b=c,c=d,d=t即可

(2).证明欧几里得算法的第一步,m<=n 仅在头一次运行的时候可能出现

欧几里得算法是计算两个数m和n的最大公约数的算法。考虑两种情况,若m>n,则第一次运行后有m = pn+r,若r不等于0,则m=n,n=r,因为r < n,所以往后都不会出现m<=n的情况。若一开始m<=n,则除开等于情况,第一次有m = 0 * n +m(因为m < n),然后 m =n ,n=m,变成 n除以m的情况,回到第一种情况的条件。证毕。
(3).改进欧几里得算法,使得m=n这种平凡的语句得到避免
恕我愚钝,只能想到开辟数组空间来避免赋值语句的办法
F1:开辟一个大小为n+2的数组
F2:i = 0 a[i]=m,a[i+1]=n
F3:a[i+2] = a[i]%a[i+1] ,if a[i+2] != 0
F4:i=i+1, go to F3
F5: return a[i+2]

猜你喜欢

转载自blog.csdn.net/l_searcing/article/details/80030450