algorithm - 从一组给定的数字中总计为给定数字的所有可能的操作组合

标签 algorithm search combinations algebra

我发现很多帖子非常相似(指的是换币问题)但使用求和运算符。 现在想象你可以加减乘除,有没有办法把所有的计算组合都变成一个给定的数?最好用 Java

例子: 给定 1 5 2 4 9 尝试得到 16

解决方案:

  • 9+1+4+2=16
  • 2*9-(5-4+1)=16
  • 5*(4+1)-9=16
  • 等等(我找到了其中的 20 个)。

谢谢。

最佳答案

由于您只有二进制操作,您可以将任何计算建模为二叉树,其中叶子是数字,所有其他节点代表操作,例如对于你的前两个例子:

  +                  -
 / \                / \
9   +              *   +
   / \            /|  / \
  1   +          2 9 -   1
     / \            / \
    4   2          5   4

因此您的算法需要以下部分:

  • 一个树生成器,用于达到特定节点数的所有可能的二叉树:从一个数字节点开始,递归地用一个运算符节点和两个子节点(数字节点)替换每个数字节点(叶子),从而生成一个树序列像这样

.

N   O       O       O       ...
   / \     / \     / \
  N   N   O   N   N   O
         / \         / \
        N   N       N   N
  • 为给定的二叉树(如上)生成所有可能的操作和数字插入的“树填充器”,例如:

.

  O    :    +     +    ...  -  ...
 / \       / \   / \       / \
N   N     1   5 1   2     1   5
  • 计算结果的树评估器

编程愉快! :-)

关于algorithm - 从一组给定的数字中总计为给定数字的所有可能的操作组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870532/

相关文章:

algorithm - 将在 O(n) 时间内对 n 个不同的整数进行排序的排序算法

c - 确定一个数组是否有数字 a 到 b 各一次

php - wordpress 跳转到带有搜索查询的页面输入/page/#/?s=term

bash - 如何搜索 PID? ( bash )

algorithm - 树搜索算法(从边缘/队列中删除前面的节点-目标测试-扩展)

PHP 可能的组合 3 个 2 个值的数组

algorithm - 求解递归 T(n) = 2T(sqrt(n))

c - 使用递归查找具有相同数量的 0's and 1' 的最大子数组的长度

python - 从列表中删除数字而不更改总和

java - 我可以使用什么可能的模式来存储单词组合?