項目歐拉#1 Python代碼對於問題#1項目歐拉在hackerrank.com,這就是問題所在:找不到邊緣情況在Hackerrank
如果我們列出所有低於10的自然數是倍數的3或5,我們得到圖3,5,6和9,這些倍數的總和23. 查找的3或5的下方N.
輸入格式
第一行的所有倍數的總和包含T表示測試用例的數量。這之後爲T行,每行包含一個整數,N.
輸出格式
對於每一個測試的情況下,打印表示3或5的所有倍數低於N.的整數,
限制條件:
1≤:T≤105
1≤N≤109
def multSums(num, div):
hiMult = int((num-1)/ div)
return int(div * hiMult * (hiMult + 1)/2)
while True:
try:
n = int(input())
except EOFError:
break
result = multSums(n, 3) + multSums(n, 5) - multSums(n, 15)
if result > 0:
print(result)
對於這個問題,如果我使用列表理解來獲得所有倍數,我會因爲測試用例太長而失敗。相反,我減少了數字(N以下的所有倍數),將數字除以div
(3,5,15),並使用總和公式計算連續數字hiMult * (hiMult + 1)/2
並使用結果乘以div
。我需要用15
這樣做來刪除重複的倍數:結果爲multSums(n, 3) + multSums(n, 5) - multSums(n, 15)
。
但是,當我提交此代碼時,代碼僅適用於示例測試用例和我能想到的任何自定義測試用例。我可以在這裏錯過哪些邊緣案例?
使用raw_input,而不是輸入。 –
如果'N'是2呢? –
如果'N'是2,它不應該打印任何東西,這是預期的。 –