我必须为算法建立一个代码。我必须用我的算法实现以下目标:
我有三个数字,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)

07-24 09:24