我一直在研究Code Wars 功能
def prescribe(d, a, b):
嘗試在給定目標數字 d(例如 4540)的情況下,我想計算數字 a(例如 9)在不超過該值的情況下可以接近多少。除了一堆其他標準。這是我到目前為止創建的作業:
sum = 0
x = int(d / a) * a
y = int(d / b) * b
if d % a == 0:
return x
elif d % b == 0:
return y
while d > sum:
sum = a b
final = sum - (a b)
if x > final and x > y:
return x
elif y > final and y > sum:
return y
else:
return final
誠然,這不是最有效的代碼,所以請耐心等待。這里發生的主要問題是我似乎無法弄清楚如何在目標 d 中回傳最大可能值。因此,例如,當我使用以下引數呼叫函式時:
prescribe(4540, 9, 15)
我回傳的最大值是數字 9:4536,而實際上答案是 4539。我認為問題是我通過簡單地將 4540 除以 9,然后轉換為 504.4 來繞過最大可能值使用 int() 函式進入 504.0。實際上我應該使用504.3。
我希望這能說明我的代碼面臨的缺點——似乎無法弄清楚如何在目標范圍內獲得最大可能值。如果有人能就我應該解決這個問題的限制或方式向我提出建議,我將不勝感激。
uj5u.com熱心網友回復:
一串解決方案
def prescribe(d, a, b):
return d - min((d - a * i) % b for i in range(d // a 1))
print(prescribe(4540, 9, 15)) # 4539
解釋
所以讓我們把這個任務改寫為
求 r 的最小值a*x b*y r = d,其中d, a,b是給定引數,x,y是變數
解決方案是
- 您必須遍歷所有可能的
x(或y),但就a積極而言,您只需遍歷[0, d//a]區間。 - 數數
r = (d - a * x) % b r在您收到的所有 s 之間找到最小值
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484900.html
上一篇:錯誤:無法加載檔案或程式集“Microsoft.Azure.WebJobs.Script.Abstractions
下一篇:基于向量長度的遞回函式
