小编ach*_*zig的帖子

生成非负整数数组,其中元素之和是固定的

给定一个整数n和k,我想创建一个大小为k的所有数组的数组,其中包含与n相加的非负整数。例如,如果k = 3且n = 10,我想要

[2,2,6]
[2,6,2]
[3,3,4]
[10,0,0]
etc....
Run Code Online (Sandbox Code Playgroud)

请注意,顺序很重要,这可能会使此过程变得容易。我知道总共应该有n + k-1个选择k-1个数组。

我最初的想法是只具有k个嵌套循环,每个元素上的嵌套循环将经历0到n,然后在末尾使用if语句来检查总和是否为n。但是,这似乎很笨拙且效率很低,我想知道是否有更好的方法来实现,最好避免嵌套循环,因为我希望能够轻松地调整k。也许有相关的图书馆?我正在使用Python。

这是我对于k = 4和n = 16(糟糕)的情况:

a=0
list = []
for i in range(17):
    for j in range(17-i):
        for k in range(17-i-j):
            for l in range(17-i-j-k):
                if i+j+k+l==16:
                    list.append([i,j,k,l])
                    a += 1   
Run Code Online (Sandbox Code Playgroud)

python math combinatorics

3
推荐指数
1
解决办法
68
查看次数

标签 统计

combinatorics ×1

math ×1

python ×1