繁体   English   中英

欧拉 Python 项目

[英]Project Euler Python

我正在研究 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)

它回来了

count = 266333

但这不是正确答案。 Count 应该等于 233168。谁能帮我弄清楚为什么要这样做?

谢谢!

您正在重复计算 5 和 3 倍数的数字,例如 15。

您正在重复计算 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)

这是因为如果这个数是3的倍数,它不检查它是否是5的倍数; 如果不是3 的倍数,则检查它是否是 5 的倍数。

我还建议使用s作为变量名,因为它代表 sum,不能使用,因为它是关键字。 计数似乎是指某事发生的次数。

通过只使用一个变量,并使用 if/else 语句,执行时间会更少,阅读也不会那么混乱。

祝你好运!

这是我的代码:

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 这样是两者倍数的数字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM