Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在数字之间加上符号,使数字变成100_Algorithm_Dynamic_Numbers - Fatal编程技术网

Algorithm 在数字之间加上符号,使数字变成100

Algorithm 在数字之间加上符号,使数字变成100,algorithm,dynamic,numbers,Algorithm,Dynamic,Numbers,我需要帮助解决以下问题。给定一个数字,我必须在数字之间加上符号(+、-、*、/),以检查是否有任何组合结果为100。我们可以将数字分组为多个数字,但不能更改数字的顺序。例如,593347→ 5 + ((9 / (3 / 34)) – 7) = 100,271353→2-(7*((1/3)-5)*3)=100,而707409永远不会得到100。我可以理解动态规划是解决方案,但我找不到确切的算法。提前感谢。考虑查找。尝试查找语句等于100的置换 编辑:多亏了Gassa 这两者都是:运算顺序的排列和运

我需要帮助解决以下问题。给定一个数字,我必须在数字之间加上符号(+、-、*、/),以检查是否有任何组合结果为100。我们可以将数字分组为多个数字,但不能更改数字的顺序。例如,593347→ 5 + ((9 / (3 / 34)) – 7) = 100,271353→2-(7*((1/3)-5)*3)=100,而707409永远不会得到100。我可以理解动态规划是解决方案,但我找不到确切的算法。提前感谢。

考虑查找。尝试查找语句等于100的置换

编辑:多亏了Gassa
这两者都是:运算顺序的排列和运算本身的笛卡尔积。

让我们简化一下。假设数字是1234

第0步:数字是100吗?不是

第一步:看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)怎么样?等等
第二步:看12和34

  • 步骤2a:我们能找到f(12)+f(34)的答案吗
  • 步骤2b:我们能找到f(12)-f(34)的答案吗
  • 等等
每次使用特定数字和预期结果调用函数时,请存储答案,以便在使用相同参数调用时可以再次使用

这是这个问题的动态规划解决方案的草图


我怀疑这样做需要大量的计算时间和内存。当问题被限制为+和-,这就足够困难了。例如,请参见。

由于可能有多个类似的符号,因此所讨论的组合对象是笛卡尔积,而不是置换。Upd:实际上,这两者都是:操作顺序的置换和操作本身的笛卡尔积。啊,这就是我遗漏的。你能不能用伪语言给我提供一个算法,因为我不完全理解它?Thanks@algozer如果总是有六个数字,您可以直接进行,例如:for(表示操作顺序的排列)for(op1)for(op2)…for(op5){计算结果表达式}。您需要找到所有这样的解决方案,还是只声明存在(或不存在)对于某些解决方案?不,我只需要检查是否有任何组合结果为100。这意味着,如果我们在第一次尝试中发现它,我们将停止算法,不同的是,我们必须检查所有可能的组合。数字可以有多大?在这种情况下,为什么不使用蛮力?尝试将每个运算符放在每个可能的位置并进行计算。或者蛮力rce不可接受???()是允许的?取决于您使用的语言,如果没有类似eval()的东西,在暴力期间对表达式求值可能会很困难。我也会选择暴力,因为复杂性对n来说并不坏,对于案例1+f(234,99),这很简单,因为我们知道第二次调用必须导致99。但是在案例f中(12,)+f(34,),我们在寻找哪些值?是的@JuanLopes,这是一个复杂的问题。结果相互影响。因此,也许f(12)返回一组可以生成的值,f(34,
v
)在
v
中查找100-每个值。