生成所有总和组合

Posted

技术标签:

【中文标题】生成所有总和组合【英文标题】:Generate all sum combinations 【发布时间】:2011-09-05 12:18:45 【问题描述】:

给定一组 6 个数字,例如 1,5,8,9,2,6 和 2 个操作数,例如 + 和 - 我想知道您将如何生成所有可能的有效和,例如 1+8=9 等等.

数字可以是正数 0-9,操作数可以是 +-/* 平方和平方根

如果有人能提供帮助,我将不胜感激。

谢谢

【问题讨论】:

你能解释一下“有效”是什么意思吗? valid 是指计算的整数组合,例如 1+2=3 有效,1+4=3 无效 【参考方案1】:

因为它是一个集合,并且数字的范围是 [0,9] - 一个简单的解决方案将是回溯,最多需要 3^n 伪代码:

solution(set,aFormula,op1,op2):
  if set == []: print calculate(aFormula)
  else:
     solution(set[1-set.end],aForumula,op1,op2)
     solution(set[1-set.end],op1(aFormula,set[0]),op1,op2)
     solution(set[1-set.end],op2(aFormula,set[0]),op1,op2)

注意 - 您可能需要对一元运算进行额外处理,但不会对算法产生太大影响。

【讨论】:

【参考方案2】:

"正数0-9"

0 不是正数。

"操作数可以是 +-/* 平方和平方根"

平方和平方根只接受一个参数,那么如何将它应用于列表的两个元素?

由于您没有在此处指定任何语言,因此您的帖子中所述的添加解决方案:

a = [1, 5, 8, 9, 2, 6]
print set ( [x + y for x in a for y in a] )

这允许相同元素与其自身相加,如果不打算这样做,请相应地更改它。 根据需要使用其他运算符。

非常详细的 C 语言示例:

#include <stdio.h>

void main ()

    int list [6] = 1,5,8,9,2,6;
    int i, j;
    for (i = 0; i < 6; i++)
        for (j = i + 1; j < 6; j++)
            printf ("%d + %d = %d\n", list [i], list [j], list [i] + list [j] );

【讨论】:

感谢您的回答,抱歉我想在objective-c中询问示例 好的,我在您的帖子中添加了“objective-c”标签。抱歉,objective-c 无法帮助您。但想法是一样的。取数字向量,用向量(或向量减去给定元素)压缩向量的每个元素,并将所需的操作应用于所有结果元组。忽略重复的结果。 谢谢,添加了 C 标记,因为我也对 C 中的代码感到高兴。现在就尝试一些东西 @Jonathan 我在回答中包含了一个详细的 C 示例。【参考方案3】:

好吧,因为只有 6*5*4(从集合中挑选数字)*4(操作数),您可以轻松生成所有可能的排列并检查每个排列的有效性。我无法在目标 c 中提供代码,但您可以使用嵌套循环来获取所有可能的排列、执行计算并在计算结果与您在排列中选择为“结果”的数字匹配时打印排列

【讨论】:

以上是关于生成所有总和组合的主要内容,如果未能解决你的问题,请参考以下文章

使用 R 获取总和为 100 的所有组合

查找并打印总和为 100 的每个唯一组合,并返回 1 到 100 之间数字的所有此类组合的计数 [重复]

如何返回所有具有 N 总和的唯一数字组合 [重复]

组合总和--力扣

39. 组合总和

39. 组合总和