问题陈述:
计算器坏了。只有几个数字和运算符在工作。
需要使用工作数字和运算符形成申请号每次按键盘都称为操作。
0 to 9运算符始终工作,并在使用运算符形成请求号时使用。
+, -, *, /需要打印,以防无法使用提供的数字和运算符形成申请号,或超过允许的最大操作数。
在计算结果期间的任何时间点上,编号都不应为负数或超过999[=]
输入:
第1行包含3个空格分隔的编号:工作位数、工作操作员编号、最大允许操作次数。
第二行包含空格分隔的工作数字。
第三行包含空格分隔的工作运算符[-1表示0 <= calcno <= 9991表示+2表示-3表示*]。
第4行包含需求不需要成形。
输出:
找出形成需求编号所需的最小操作。
例子:
输入1:

2 1 8
2 5
3
50

可能的方式:
案例1:4=>/
案例2:2*5*5=>6 operations
4是请求答案
输入2:
3 4 8
5 4 2
3 2 4 1
42

可能的方式:
案例1:2*25>4 operations(直接输入)
案例2:42=>2 operations
……其他方式
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
           \
            (*)

这比野蛮的强迫稍微好一点,也许有一个更好的方法。

10-04 20:53