在数字之间放置符号,使数字结果为100

时间:2015-08-18 20:17:40

标签: algorithm dynamic numbers

我需要帮助解决下面的问题。给出一个数字,我必须在数字之间放置符号(+, - ,*,/)以检查是否有任何组合导致100.我们可以将数字分组到多个组中一,但我们不能改变数字的顺序。例如593347→5 +((9 /(3/34)) - 7)= 100,271353→2-(7 *(((1/3)-5 )* 3)= 100,而707409永远不会导致100.我可以理解动态编程是解决方案,但我找不到确切的算法。谢谢。

2 个答案:

答案 0 :(得分:2)

让我们暂时简化一下。想象一下这个数字是1234。

第0步:数字是100吗?无

第1步:看1和234。

  • 步骤1a:我们能找到1 + f(234)的答案吗?这需要我们 用数字234调用我们的函数,并回答99(因为1 + n = 100意味着n = 99)。
  • 步骤1b:1-f(234)怎么样?这需要 我们用数字234调用我们的函数,并回答-99(因为 1 - n = 100表示​​n = -99)。
  • 步骤1c:1 * f(234)怎么样?等

第2步:看12和34。

  • 步骤2a:我们能找到f(12)+ f(34)的答案吗?
  • 步骤2b:我们能找到f(12) - f(34)的答案吗?

每次调用具有特定数字和预期结果的函数时,请存储答案,以便在使用相同参数调用它时再次使用它。

这是该问题的动态编程解决方案草图。

我怀疑这需要大量的计算时间和内存。当问题被限制在+和 - 时,它已经足够困难了。例如,请参阅https://vortexwolf.wordpress.com/2013/12/07/algorithm-plus-minus-result-100/

答案 1 :(得分:0)

考虑查找Heap's algorithm for permutations。尝试查找语句等于100的排列

编辑:感谢Gassa 它们都是:操作顺序的排列和操作本身的笛卡尔积。