1. 程式人生 > >程式設計藝術學習筆記(1)

程式設計藝術學習筆記(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]