我必须在给定的N个数(不包括N个)的范围内计算3和5(包括它们自己)的所有倍数的总和。我创建了一个python代码,它适用于N = 10,但不适用于N =100。我不明白为什么。
这是代码:
#!/bin/python3
import sys
def multiples_sum(n):
sum1 = 0
for i in range(n):
if i % 3 == 0:
sum1 = sum1 + i
if i % 5 == 0:
sum1 = sum1 + i
return sum1
t = int(input().strip())
for a0 in range(t):
n = int(input().strip())
print(multiples_sum(n))
Run Code Online (Sandbox Code Playgroud)
您正在计算15的倍数(= 3 * 5)两次。
您的代码应该是
for i in range(n):
if i % 3 == 0:
sum1 += i
elif i % 5 == 0:
sum1 += i
Run Code Online (Sandbox Code Playgroud)
注意elif而不是if。
或者:
for i in range(n):
if i % 3 == 0 or i % 5 == 0:
sum1 += i
Run Code Online (Sandbox Code Playgroud)
或直接(如DeepSpace在评论中建议的那样)
sum1 = sum(i for i in range(n) if 0 in {i % 3, i % 5})
Run Code Online (Sandbox Code Playgroud)
请注意,根本不需要循环:知道从1到(包括)的整数之和n为
def sum_to(n):
return ((n+1)*n)//2
Run Code Online (Sandbox Code Playgroud)
您可以从以下地址获取您的电话号码:
sum1 = 5 * sum_to((n-1)//5) + 3 * sum_to((n-1)//3) - 15 * sum_to((n-1)//15)
Run Code Online (Sandbox Code Playgroud)
(可以将其概括化,并使其更漂亮……但是我敢肯定,您会以这种形式得到这个想法)。
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |