问题陈述:
有一个破碎的计算器。只有少数数字[0 to 9
]和运算符[+, -, *, /
]正在运行。
请求号码需要使用工作数字和运算符来形成。键盘上的每次按下都称为操作。
=
运算符始终工作,并在req no时使用。是由运营商组成的。-1
需要打印,以防请求号码。无法使用数字和提供的运算符形成或超过最大数量。允许的操作。0 <= calcno <= 999
]输入:
1
代表+
,2
代表-
,3
代表*
,4
代表/
]。输出:
找到形成请求号的最低要求操作。
例:
输入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
我没有正确解决这个问题。 有人可以建议一些方法来解决问题。
提供一些更多的背景,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
\
(*)
这比粗暴强制略好,也许有更优化的方式。