不确定我是否应该将它发布到 math.stackexchange 上,但它包含更多编程,所以我将它发布在这里。
这个问题看起来很简单,但我已经坐在这里至少一个小时了,现在还没有弄清楚。我尝试了不同的解决方案,并阅读了它的数学公式等,但在编码时它不会给我正确的答案!我为此做了两种不同的解决方案,但都给了我错误的答案。第一个解决方案给了我 265334,而第二个给了我 232169。答案是 233168,所以第二个解决方案更接近。
我应该提到这是来自 Project Euler, the first one 的问题准确地说。
这是我的代码。有什么问题吗?
nums = [3, 5]
max = 999
result = 0
for num in nums:
for i in range(1,max):
if num*i < max:
result += num*i
print result
result = 0
for i in range(0,max):
if i%3 == 0 or i%5 == 0:
result += i
print result
最佳答案
你把事情搞得太复杂了。您只需要一个 3 或 5 的倍数的数字列表,您可以使用 list comprehension 轻松获得这些数字。 :
>>> [i for i in range(1000) if i % 3 == 0 or i % 5 == 0]
然后使用sum
得到总数:
>>> sum([i for i in range(1000) if i % 3 == 0 or i % 5 == 0])
<<< 233168
或者更好地使用 generator expression相反:
>>> sum(i for i in range(1000) if i % 3 == 0 or i % 5 == 0)
甚至更好更好(由 Exelian 提供):
>>> sum(set(list(range(0, 1000, 3)) + list(range(0, 1000, 5))))
关于python - 如何在 Python 中求 1000 以下的所有 3 或 5 的倍数之和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930300/