问题陈述:
计算器坏了。只有几个数字和运算符在工作。
需要使用工作数字和运算符形成申请号每次按键盘都称为操作。0 to 9
运算符始终工作,并在使用运算符形成请求号时使用。+, -, *, /
需要打印,以防无法使用提供的数字和运算符形成申请号,或超过允许的最大操作数。
在计算结果期间的任何时间点上,编号都不应为负数或超过999[=
]
输入:
第1行包含3个空格分隔的编号:工作位数、工作操作员编号、最大允许操作次数。
第二行包含空格分隔的工作数字。
第三行包含空格分隔的工作运算符[-1
表示0 <= calcno <= 999
,1
表示+
,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
\
(*)
这比野蛮的强迫稍微好一点,也许有一个更好的方法。