自學Python之心得體會(四)
阿新 • • 發佈:2018-12-16
Python 練習例項3
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
程式分析:這道題設計到演算法問題,設計程式時應考慮到時間複雜度。
x+100=m^2
x+100+168=n^2
m^2-n^2=168 ------①
(m+n)(m-n)=168 ------②
由①式可知這兩個完全平方數要麼都是偶數要麼都是奇數,而由②式可知無論m,n都是偶數還是奇數,m+n和m-n得到的都是偶數,故將168拆成兩個偶數表示,有[2,84]、[4,42]、[6,28]、[12,14]。故將這幾組資料帶入方程中,便可求出解。這道題可能是因為數值較小,故手動都很方便算出解,但是如果數值很大時,就要用到迴圈去做。
方法一:用二位陣列存放著四組資料,然後用迴圈遍歷,求出X。
程式碼如下:
l=[[2,84],[4,42],[6,28],[12,14]] for i in range(0,len(l)): m=(l[i][1]+l[i][0])/2 n=m-l[i][0] x=n*n-100 print x
方法二:用迴圈得出1到69中的解。
程式碼如下:
for i in range(1,85): if 168%i==0: j=168/i; if i>j and (i+j)%2==0 and (i-j)%2==0: m=(i+j)/2 n=(i-j)/2 x=n*n-100 print (x)
方法三:利用迴圈直接從1到168中找出解,這道題數值較小,執行比較快,但如果數值很大,執行時間會加長。
程式碼如下:
for m in range(168): for n in range(m): if(m+n)*(m-n)==168: x=n**2-100 print x