生成所有总和组合

时间:2011-05-31 13:33:14

标签: objective-c c algorithm combinations

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

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

如果有人能提供帮助,我会非常感激。

由于

3 个答案:

答案 0 :(得分:2)

因为它是一个集合,并且数字的范围是[0,9] - 一个简单的解决方案将是回溯的,需要3 ^ n <1。最多3 ^ 10次迭代。只是迭代所有可能性(每个元素可以在列表内/外,以及在两个元素之间'连接'的所有可能性。对于一元的oparations:with it / out out)。
伪代码:

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)

注意 - 您可能需要额外处理一元操作,但它不会更改算法。

答案 1 :(得分:1)

“正数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] );
}

答案 2 :(得分:1)

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