1 回答

TA贡献1772条经验 获得超8个赞
当试图用代码解决问题时,你最好重用其他人编写的代码来解决类似的问题。一开始发现“相似”的问题可能很困难,但通过练习很快就会变得更容易!
在这种情况下,我将利用“pronic numbers”被定义为“两个连续整数的乘积”这一事实。使用你的变量名,我们可以把它变成优化问题:找到i最接近i*(i+1)的整数n。
我首先注意到它i*(i+1)看起来很像i*i,这是通过取平方根来反转的。计算机可以很容易地求平方根,所以这sqrt(n)将是寻找平方根的一个很好的起点i
用几个数字试试这个:
n sqrt(n) nearest i
6 ~2.4 6 2
7 ~2.6 6 2
8 ~2.8 6 2
9 3.0 12 3
11 ~3.3 12 3
12 ~3.5 12 3
我们可以看到,小数部分sqrt(n)也为我们提供了有关“最近”普罗尼克数的信息:<0.5 表示我们需要一个较小的数字,>0.5 表示我们需要一个较大的数字,这类似于“四舍五入”一个数字。我们还可以看到,i用来获取最近数的只是整数部分sqrt
转移到 Python 代码,我们可以这样做:
from math import sqrt
def nearest_pronic(n):
i = int(sqrt(n))
return i * (i+1)
您可以随意使用它,例如:
n = float(input('give me a number'))
np = nearest_pronic(n)
if n == np:
print(f"{n} is a pronic number")
else:
print(f"the nearest pronic number to {n} is {np}")
这对我来说是正确的。
添加回答
举报