Algorithm 在数字之间加上符号,使数字变成100
我需要帮助解决以下问题。给定一个数字,我必须在数字之间加上符号(+、-、*、/),以检查是否有任何组合结果为100。我们可以将数字分组为多个数字,但不能更改数字的顺序。例如,593347→ 5 + ((9 / (3 / 34)) – 7) = 100,271353→2-(7*((1/3)-5)*3)=100,而707409永远不会得到100。我可以理解动态规划是解决方案,但我找不到确切的算法。提前感谢。考虑查找。尝试查找语句等于100的置换 编辑:多亏了GassaAlgorithm 在数字之间加上符号,使数字变成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 这两者都是:运算顺序的排列和运
这两者都是:运算顺序的排列和运算本身的笛卡尔积。让我们简化一下。假设数字是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)怎么样?等等
- 步骤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-每个值。