碎计算器

问题描述 投票:0回答:1

问题陈述:

有一个破碎的计算器。只有少数数字[0 to 9]和运算符[+, -, *, /]正在运行。

请求号码需要使用工作数字和运算符来形成。键盘上的每次按下都称为操作。

  • =运算符始终工作,并在req no时使用。是由运营商组成的。
  • -1需要打印,以防请求号码。无法使用数字和提供的运算符形成或超过最大数量。允许的操作。
  • 在计算结果的任何时候,没有。应该变为负数或超过999 [0 <= calcno <= 999]

输入:

  • 第一行包含3个空格分隔的nos:no。工作数字,没有。工作操作员,最大不允许操作。
  • 第二行包含空格分隔的工作数字。
  • 第3行包含空格分隔的工作运算符[1代表+2代表-3代表*4代表/]。
  • 第4行包含req。不成形。

输出:

找到形成请求号的最低要求操作。


例:

输入1:

2 1 8  
2 5  
3  
50 

可能的方法:

案例1:2*5*5 = - > 6 operations 案例2:2*25 = - > 4 operations

4是req Answer


输入2:

3 4 8  
5 4 2  
3 2 4 1  
42  

可能的方法: 案例1:42 - > 2 operations(直接键入) 案例2:5*4*2+2 = - > 8 operations ..........其他一些方法

2是req Answer


我没有正确解决这个问题。 有人可以建议一些方法来解决问题。

algorithm recursion dynamic-programming memoization
1个回答
2
投票

提供一些更多的背景,vish4071在评论中说。

按以下方式设置图形:使用根启动图形,而不是新节点是您要大声使用的数字(例如,这是2和5)。并逐层建立图表。按以下方式创建每个级别,新节点将包括添加数字或您大声使用的运算符。在每个操作员之后,不能有另一个操作员。

如果节点的值高于Target值,则杀死节点(target as end note),这仅适用于此示例(如果运算符为*和+)。如果你能够使用 - 和/运算符,这不是vallid。

这样做直到找到所需的值,并且等级(+1,由于=操作)是你的回答。

下面给出了图表的例子

for your first example:
D=0    D=1    
       5
      /
Root /
     \
      \2


D=1    D=2   d=3   d=4
            --2
           / 
          /
        (*)___5  --> reaches answer but at level 6
        /   
       /     (*)___2  --> complete
      /     /   \  5
     /     /
  2 /____25_252    --> end node
    \     \
     \     \ 
      \     
       \    225    --> end node
        \  /
         22__222   --> end node
           \            
            (*)

这比粗暴强制略好,也许有更优化的方式。

© www.soinside.com 2019 - 2024. All rights reserved.