[英]Check which number out of two numbers in the list can make the sum equals to k
[英]How can I print the numbers which have a sum that equals the cube of a number
n = 5
cube = n**3
def get_sum(n):
a1 = n * (n - 1) + 1
for i in range(a1, cube, 2):
print(i, end='+')
print(f'{get_sum(n)}')
print(cube)
我有输出:
21+23+25+27+29+31+33+35+37+39+41+43+45+47+49+51+53+55+57+59+61+63+65+67+69+71+73+75+77+79+81+83+85+87+89+91+93+95+97+99+101+103+105+107+109+111+113+115+117+119+121+123+None
125
如何获得直到 29 的范围,以便这些数字的总和等于 Python 中的立方体?
例如, 21+23+25+27+29 = 5^3
低效方法:
保留一个跟踪当前总和的变量以检查我们是否需要中断循环(如其他答案中所述)。
有效的方法:
n^3 可以表示为 n 个奇数之和,它们关于 n^2 对称。 例子:
3^3 = 7+9+11 (symmetric about 9)
4^3 = 13+15+17+19 (symmetric about 16)
5^3 = 21+23+25+27+29 (symmetric about 25)
使用这种方法得到一个更简单的算法
首先,无需编写print(f'{get_sum(n)}')
因为您的函数不返回任何内容,除了您可以在输出中看到的None
之外, get_sum(n)
就足够了。
因为你总是循环 n 次,所以你可以简化你的条件,在我的解决方案中,我使用了一个带有sum
变量的 while 循环来保持当前数字总和的标签。
当然,您可以使用 for 循环应用相同的逻辑,这只是我的实现。
def get_sum(n):
a1 = n * (n - 1) + 1
sum = a1
while sum < cube:
print(a1, end='+')
a1+=2
sum+=a1
print(a1, end='=')
n = 5
cube = n**3
get_sum(n)
print(cube)
输出:
21+23+25+27+29=125
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.