此代码的目标是在给定范围之间打印3和5的倍数之和。在hackerrank中,我在测试用例2和3中遇到错误。任何人都知道如何解决这个问题?
t =int(raw_input())
for i in range(0,t):
range = int(raw_input())
a=3
b=5
aa=[]
res=[]
def forA(a): #Calculating Multiple of 3
while True:
if a >=range :
a = a-3
break
else:
aa.append(a)
a += 3;
def forB(b): #Calculating Multiple of 5
while True:
if b >=range :
b=b-5
return b
break
else:
aa.append(b)
b += 5;
forA(a)
forB(b)
for i in aa: #eliminate duplicate values of multiples.
if i not in res:
res.append(i)
print sum(res)
答案 0 :(得分:0)
这可能会解决您的问题,因为它使用“智能”的pythons内置功能,而不是自己一次创建一个列表。因此它们更快......这可能解决你得到的时间错误。
通过
,您可以获得从3或5到t输入的所有数字from itertools import chain
t =15
threes = range(0,t+1,3) # range provides [lower..higher[ not including higher value
fives = range(0,t+1,5)
sums = sum(chain(threes,fives)) # without itertools: sums=sum(threes) + sum(fives)
print(threes)
print(fives)
print(sums)
如果你想避免倍数,请避免使用chain(..)
,使用集合并将它们连接在一起然后总结它们
s = set(threes) | set(fives)
print(sum(s))
输出:
[0, 3, 6, 9, 12, 15] # threes up to 15
[0, 5, 10, 15] # fives up to 15
75 # sum of chained ones
60 # sum of set