c - 对多组求和

标签 c algorithm math

如果我有几组数字(只是一个二维数组,其中每一行都是一组):

 [ 1, 3, -1, -1]
 [ 2, 4, -1, -1]
 [ 7, 8, 9, 10]

创建和列表(忽略 -1)的算法是什么?上面的结果是:

1+2+7,
1+2+8,
1+2+9,
1+2+10,
1+4+7,
1+4+8,
1+4+9,
1+4+10,
3+2+7,
3+2+8,
3+2+9,
3+2+10,
3+4+7,
3+4+8,
3+4+9,
3+4+10

最佳答案

对于第一个列表中的每个数字,生成以该数字开始的所有总和,并通过对除第一个列表以外的所有列表应用相同的方法递归生成所有总和。当您没有剩余列表时,这是基本情况。

伪代码:

function find_sums(lists):
    if lists is empty:
        return [""]
    sums = []
    for n in lists[0]:
        if n != -1:
            for sum in find_sums(lists from index 1 onwards):
                sums.append(n + "+" + sum)
    return sums

这叫做 Cartesian product .

关于c - 对多组求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4619652/

相关文章:

.net - .net 框架是否具有将度数转换为弧度的内置方法?

c - 我如何选择一行来计算c中的矩阵减法

c - C : sending data to the parent process 中的进程管理

algorithm - 创建动态编程算法以使用 tetranacci 数计算斐波那契数列

algorithm - 为什么这个简单的洗牌算法会产生有偏差的结果?

javascript - 如何使用抛物线找到二次曲线的控制点?

c++ - 弄清楚晦涩的指针typedef

支持mocking嵌套函数的C单元测试框架

python - 对我来说最重要的问题 : is there a better way off doing it and if there is, 你们能给我指出正确的方向吗?

java - 如何以给定的概率传播随机值?