【问题标题】: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 无效

标签: objective-c c algorithm combinations


【解决方案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 中提供代码,但您可以使用嵌套循环来获取所有可能的排列、执行计算并在计算结果与您在排列中选择为“结果”的数字匹配时打印排列

    【讨论】:

      猜你喜欢
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多