自学Python之心得体会(四)

本文探讨了一个数学谜题,寻找一个整数,它加上100和268后分别是两个完全平方数。通过三种不同的算法实现,展示了如何使用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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值