1. 程式人生 > >自學Python之心得體會(四)

自學Python之心得體會(四)

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