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}")
這對我來說是正確的。
添加回答
舉報