嗨,我一直在试用这个problem
假设P(n)是2^n的数字之和
例如:
若2^15 = 32768,其数字之和为3+2+7+6+8= 26,则P(15)=26。
n=1的P(n)的加成和为10000。
我的python code给出了67783431的答案,但法官似乎并不同意这一点:
def P(n):
n = int(1<<n)
S = 0
while n != 0:
S += (n%10)
n /= 10
return S
Sum = 0
for i in range(1,10001):
Sum += P(i)
else:
print(Sum)有人能告诉我我的方法出了什么问题吗?如果有人为我指出同样的数学解,我将不胜感激。
发布于 2011-02-03 19:41:47
如果你展示了这些评论,你就会发现网站所有者或问题维护人员是个白痴。
他的意思是说从"0到10000",而不是"1到10000",但显然这个问题不能编辑,或者维护人员不想这样做。
和是1,因为1<<0是1,这增加了1的和。
试着提交67783432。
Note:我意识到把网站所有者或维护者称为白痴听起来可能很苛刻,但是当在网站上发布关于“数学”的内容时,准确性是很重要的。有这样一个网站,没有能力,或要求,解决错误的问题,似乎有点愚蠢。
发布于 2011-02-03 19:56:39
在函数式编程方面,一个更优雅的解决方案可能是:
>>> P = lambda n: sum(map(int, str(1 << n)))
>>> sum(P(i) for i in xrange(10001))
67783432(注意,这将计算i=0到10000的P(i)之和。)
发布于 2011-02-03 19:31:27
您的解决方案需要相当长的时间才能运行(至少超过一分钟)。法官对解决方案运行所需时间是否规定了时间限制?
另外,如果您使用Python3,那么除法运算符(/=)总是会产生一个浮点结果。在Python 2中,结果将被截断为具有整数输入的整数。
实际上,对于Python 3,我得到了一个溢出错误:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 6, in P
OverflowError: int/int too large for a floathttps://stackoverflow.com/questions/4890610
复制相似问题