项目欧拉#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,它不应该打印任何东西,这是预期的。 –