繁体   English   中英

如何打印总和等于数字立方的数字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM