菜鸟教程python100题-Python 练习实例3

#15

newbie

jij***qq.com

37

以下解析由 CosmosHua(cosmoscosmos@163.com)提供:

设该数为x:x + 100 = n^2, n^2 + 168 = m^2。

设m=n+k(不妨设m,n,k均为自然数):带入m^2-n^2-168,得k^2+2nk=168。

解得n=84/k - k/2;由于n,k均为自然数,则nk>=1,故1<=k^2<168,故1<=k<=12。

#!/usr/bin/env python

for x in range(1, 13):

a = 84/x -x/2

if int(a) == a:

n = a ** 2 - 100

print(n)

newbie

newbie

jij***qq.com3年前 (2017-05-31)

#14

Joker

837***308@qq.com

2

参考方法:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

for i in range(1, 85):

if 168 % i == 0:

j = 168 / i

if i > j:

m = (i + j )/2

n = (i - j )/2

if m * m - 268 == n * n - 100 and (n * n - 100) % 1 == 0:

print('x = ', m * m - 268)

Joker

Joker

837***308@qq.com3年前 (2017-06-16)

#13

laugh_boy

183***79195@163.com

13

参考方法:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

for m in range(168):

for n in range(m):

if (m+n)*(m-n)==168:

x=n**2-100

print "符合条件的整数有:",x

laugh_boy

laugh_boy

183***79195@163.com3年前 (2017-06-18)

#12

矿泉的水

284***511@qq.com

2

思路:根据题意可先求出所求数的最大范围,并在范围内部循环测试是否有满足条件的数字,若有,则打印出来:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

i = 1

#求出最大范围

while ((i+1)*(i+1)-i*i) <= 168:

i += 1

#循环测试并打印

for j in range(1,i):

for k in range(1,i):

if (k*k - j*j) == 168:

print k*k-268

矿泉的水

矿泉的水

284***511@qq.com3年前 (2017-06-19)

#11

小崔

105***3494@qq.com

3

参考方法:

#!/usr/bin/python

# -*- coding: UTF-8 -*-

#一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

'''

分析:

设这个整数为x

1、 x+100=n^2和x+100+168=m^2

推出 m^2-n^2=168

即 (m+n)(m-n)=168

设 m+n=i m-n=j

则 i*j=168

由 i>0 j>0 推出 i%2=0 j%2=0

由 168=2*2*2*3*7

上面两个条件推出i与j值的范围[2,4,6,12,14,28,42,84]

反推:m=(i+j)/2和n=(i-j)/2 并且 n>0 推得 i>j

则 i=[14,28,42,84]

j=[12,6,4,2]

'''

arr1=[14,28,42,84]

arr2=[12,6,4,2]

for i in range(0,4):

m=(arr1[i]+arr2[i])/2

n=(arr1[i]-arr2[i])/2

x=n*n-100

print x

小崔

小崔

105***3494@qq.com3年前 (2017-06-20)

#10

colinshi

col***shi@hotmail.com

4

#!/usr/bin/python

# -*- coding: UTF-8 -*-

#X1=N*2-100的合集

x1 = map(lambda i:i**2-100,range(1,100))

#X2=M*2-100-168的合集

x2 = map(lambda i:i**2-100-168,range(1,100))

#两个合集求并集结果

print(set(list(x1)) & set(list(x2)))

#总体思路就是根据公式求得X1和X2,然后并集操作。得出结果。

colinshi

colinshi

col***shi@hotmail.com3年前 (2017-07-04)

#9

AoXiaole

154***5738@qq.com

9

大家都通过了计算,然后,我根据前面同学的计算,居然把答案计算出来了,哈哈哈哈

过程:

引用楼上:

设该数为x:x + 100 = n^2, n^2 + 168 = m^2。

设m=n+k(不妨设m,n,k均为自然数):带入m^2-n^2-168,得k^2+2nk=168。

在此基础上 k(k+2n)=168 , 若 k为奇数,k+2n也为奇数,等式不成立,所以k为偶数,

则等式除以4,得(k/2)(k/2+n) =42, 令 t=k/2, (t>0)

t(t+n)=42 则 n= 42/t -t ; 由于n大于0,所以 t小于等于6 ,42/t 又是整数,得到 t 的取值为 1,2,3,6,

对应得到 x =1581,261,21,-99

AoXiaole

AoXiaole

154***5738@qq.com3年前 (2017-08-14)

#8

Krystal

104***7454@qq.com

17

力求使用最简单易读的方法解决问题:

#!/usr/bin/python

# -*- coding:utf-8 -*-

t = []

for m in range(168):

for n in range(m):

if m**2 - n**2 == 168:

x = n**2 - 100

t.append(x)

print('符合条件的整数有:',t )

Krystal

Krystal

104***7454@qq.com3年前 (2017-09-28)

#7

小叶

cms***@qq.com

11

Python3 测试:>>> print([n**2-100 for m in range(168) for n in range(m) if(m+n)*(m-n)==168])

[-99, 21, 261, 1581]

小叶

小叶

cms***@qq.com3年前 (2017-10-05)

#6

Mr.Cat

151***03874@163.com

5

因为题目说明x是整数,但没有说明n和m一定大于零,此处考虑了n和m小于零的情形

x+100=n^2;x+100+168=m^2;(注意,没有要求m,n一定大于零)

m^2-n^2=168 即 (m+n)(m-n)=168;

设 m+n=i,m-n=j,则m=(i+j)/2;n=(i-j)/2 有 i*j=168, 因为 m,n 都是整数且 m!=n, 所以 j,i!=0, 因为i*j是正数,故 abs(i)>=1,abs(j)>=1。所以i和j的上限可以取 168。因此m和n的上限也是168,下限可以取-168(注意,m,n的取值范围可以放得很大,不影响结果,因为限制条件可以自己去约束,但所取的范围一定要比真实范围大)

Python3 下测试代码:

x=[]

for m in range(-168,169):

for n in range(-168,169):

if (m+n)*(m-n)==168:#m,n都是整数

x.append(n**2-100)

x=set(x)#用集合的方法去掉重复值

x=list(x)#将集合类型改为列表类型

print('要求的值为:',x)

Mr.Cat

Mr.Cat

151***03874@163.com3年前 (2017-10-09)

#5

oblivion

183***08542@163.com

5

参考:

for i in range(1, 17):

for x in range(1, 168):

if 168 - (i ** 2 + 2 * x * i) == 0:

print x ** 2 - 100

oblivion

oblivion

183***08542@163.com3年前 (2017-11-20)

#4

tony

lib***a@126.com

1

参考:class Num:

def __init__(self):

pass

def calc(self):

for i in range(2,86):

for j in range(2,86):

if (i * j == 168) and (i > j):

#print(i,j)

if ((i % 2 == 0) and (j % 2 ==0)) or ((i % 2 != 0) and (j % 2 !=0)):

n = (i-j)/2

d = int(n*n -100)

print(d)

a = Num().calc()

tony

tony

lib***a@126.com3年前 (2017-11-30)

#3

Ian

s09***83190@hotmail.com

0

數學不好沒想到分解

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

先決定範圍

如果(i+1)^2 - i^2 > 168 則超出範圍, 找到i

完全平方定義開根號後為整數 =>

y**0.5 對1取餘數=0 且 z**0.5 對1取餘數=0

i=0

while i^2 < 168:

i+=1

for x in range(-i**2,i*i):

y=x+100

z=y+168

a=complex(y+0j)**0.5%1

b=complex(z+0j)**0.5%1

c=a%1

d=b%1

if c== d == 0:

print x

Ian

Ian

s09***83190@hotmail.com3年前 (2017-12-02)

#2

小鱼

yil***23@sina.com

2

#!/usr/bin/python

# coding=utf-8

# x^2 + 168 = y^2,则x、y都小于168,而且x应小于y

for y in range(168):

for x in range(y):

if y**2 - x**2 == 168:

n = x**2 - 100

print n

小鱼

小鱼

yil***23@sina.com3年前 (2018-01-09)

#1

runoob

you***you@126.com

2

参考方法:

'''

分析:

x + 100 = m^2

x + 100 + 168 = n^2

n^2 - m^2 = 168

(n + m) * (n - m) = 168

n > m >= 0

n - m 最小值为 1

n + m 最大为 168

n 最大值为 168

m 最大值为 167

'''

def _test():

for m in range(0, 168):

for n in range(m + 1, 169):

#print('n=%s,m=%s' % (n, m))

if (n + m) * (n - m) == 168:

print("该数为:" + str(n * n - 168 - 100))

print("该数为:" + str(m * m - 100))

print('n为%s,m为%s' % (n, m))

if __name__ == '__main__':

_test()

runoob

runoob

you***you@126.com2年前 (2018-07-21)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值