嘿所以我正在研究Project Euler问题。我遇到问题1,由于某种原因,我得到了错误的答案。我不知道我的数学逻辑是否是问题,或者代码的逻辑是否错误。这是代码:
def getSumMult3_5(n):
count = 0
i = 0
i_1 = 0
while i*5 < n:
count += i*5
i += 1
while i_1*3 < n:
count += i_1*3
i_1 += 1
return count
print getSumMult3_5(1000)
它返回的计数= 266333,但这不是正确的答案。伯爵应该等于233168.任何人都可以帮我弄清楚它为什么这样做?
谢谢!
答案 0 :(得分:2)
你重复计算的数字是5和3的倍数,例如15。
答案 1 :(得分:0)
您正在对15的倍数进行两次计数。您可以通过引入第三个while语句来解决此问题,即对15的每个倍数将计数减少1。
我建议使用if / else语句:
def getSumMult3_5(n):
s = 0
for i in range(1, n+1):
if i%3==0:
s+=i
elif i%5==0:
s+=i
return s
print getSumMult3_5(1000)
这是因为 if 这个数字是3的倍数,所以不检查它是否是5的倍数;如果它不是3的倍数,则检查它是否是5的倍数。
我还建议使用 s 作为变量名,因为它表示sum,因为它是关键字,所以不能使用。 Count 似乎是指某事发生的次数。
仅使用一个变量并使用if / else语句,执行时间将减少,并且读取时的混乱也将减少。
祝你好运!
答案 2 :(得分:0)
这是我的代码:
running_sum = 0
for i in range(1,1000):
if i % 3 == 0:
running_sum+=(i)
elif i % 5 == 0:
running_sum+=(i)
print running_sum
您正在对15之类的数字进行重复计算,这是两者的倍数