在hackerrank的测试用例2和3中获取超时错误和运行时错误。怎么解决这个?

时间:2017-12-09 16:02:46

标签: python-2.7

此代码的目标是在给定范围之间打印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)

1 个答案:

答案 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