我想创建一个函数,以便它找到整数a,以便a <= n
。
如果n
为99
,则程序将返回a = 3
。
这是因为函数是找到连续立方体的总和。
所以,1 + 8 + 27 + 64 = 100
,更多而不是99
。但1 + 8 + 27
少而不是99
,因此a = 3
是正确答案。
我试图做类似的事情:
cubes = 0
for i in xrange(1, 1+x)
cubes += i*i*i
while cubes <= n
但我很困惑。我该怎么办?
答案 0 :(得分:6)
首先用for
循环替换while
循环:
cubes, i = 0, 0
while cubes <= n:
i += 1
cubes += i ** 3
然后,在循环之后,减去最后一个多维数据集,因为你已超过限制n
:
cubes -= i ** 3
i
仍然具有循环中的最终值。
或者,您可以在一个循环中执行所有操作,首先将cubes
的新值计算为临时变量,然后仅在未超出限制时更新cubes
:
cubes, i = 0, 0
while True: # infinite loop
i += 1
new_cubes = cubes + i ** 3
if new_cubes > n:
break
else:
cubes = new_cubes
答案 1 :(得分:1)
使用itertools.count
和for循环:
from itertools import count
def solve(n, pow):
total = 0
for i in count(1):
if total + i**pow > n:
return i-1
total += i**pow
<强>演示强>:
>>> solve(99, 3)
3
>>> solve(50, 2)
4
答案 2 :(得分:0)
我是这样做的。
def cubes(n=1):
while True:
yield n ** 3
n += 1
def sum(array):
total = 0
for item in array:
total += item
yield total
def sum_cubes_lt(n):
for i, sum in enumerate(sum(cubes()):
if sum > n:
return i
# prints '3'
print sum_cubes_lt(99)