我必须为算法建立一个代码。我必须用我的算法实现以下目标:
我有三个数字,4,6,8我必须用其中的两个数求和,然后用其中的三个数求和,然后用四个数求和,以此类推当然,在这个例子中可能有重复的:4+4+6
我想到了使用“for”循环,所以其中两个数字的和可以用两个嵌套的for循环生成三个嵌套的“for”循环将给出三个数的和等。。。
我可以通过使用“for”来限制这个解决方案,例如直到五个数字的和,但这不是一个通用的解决方案。
有没有办法或算法或数学方法来做到这一点?
与数学组合学有相似之处。
最佳答案
对于任何给定数量的项,只需要两个循环假设你想要n个值的和。对于任何给定的和,n8乘以8,n6乘以6,n4乘以4,n8+n6+n4=n。要生成所有可能的组合,只需循环n8和n6,就可以从中计算出n4的值。在python中:
def findsums(n):
# n8 = [0..n]
for n8 in range(n+1):
#n6 = [0..n-n8]
for n6 in range(n+1-n8):
n4 = n - n8 - n6
# build the string consisting of n terms
s = "+8" * n8 + "+6" * n6 + "+4" * n4
# print, and strip the first '+' character
print( "{0}={1}".format( s[1:], 8*n8+6*n6+4*n4 ) )
findsums(5)