碎计算器

时间:2017-04-05 07:20:38

标签: algorithm recursion dynamic-programming memoization

问题陈述:

计算器坏了。只有少数数字[xcode-select --install ]和运算符[0 to 9]有效。

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

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

输入:

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

输出

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

示例:

输入1:

4

可能的方式:

案例1: / = - &gt; 2 1 8 2 5 3 50
案例2: 2*5*5 = - &gt; 6 operations

  

4是req Answer

输入2:

2*25

可能的方式:
案例1:4 operations - &gt; 3 4 8 5 4 2 3 2 4 1 42 (直接键入)
案例2:42 = - &gt; 2 operations
..........其他一些方式

  

2是req Answer

我没有正确解决这个问题 有人可以提出一些解决问题的方法。

1 个答案:

答案 0 :(得分:2)

给出了vish4071在评论中所说的更多背景信息。

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

如果节点的值高于目标值,则杀死节点(目标为结束音符),这仅适用于此示例(如果运算符为*和+)。如果你能够使用 - 和/运算符,这不是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
           \            
            (*)

这比粗暴强迫要好一些,也许有更优化的方式。