【发布时间】:2017-04-05 07:20:38
【问题描述】:
问题陈述:
有一个坏了的计算器。只有少数数字 [0 to 9] 和运算符 [+, -, *, /] 有效。
一个请求号。需要使用工作数字和运算符形成。键盘上的每一次按下都称为一次操作。
-
=运算符始终在工作,并且在请求编号时使用。是使用运算符形成的。 -
-1需要打印以防请求号。无法使用数字组成,并且提供的运算符 OR 超过最大数量。允许的操作。 - 在计算结果的任何时间点,没有。应该变成负数或超过 999 [
0 <= calcno <= 999]
输入:
- 第一行包含 3 个空格分隔的编号:没有。工作数字,没有。工作操作员,最大。不允许任何操作。
- 第二行包含空格分隔的工作数字。
- 第三行包含空格分隔的工作运算符[
1代表+,2代表-,3代表*,4代表/]。 - 第 4 行包含请求。不成立。
输出:
找到最少需要个操作来形成req no。
例子:
输入 1:
2 1 8
2 5
3
50
可能的方式:
案例 1: 2*5*5 = -> 6 operations
案例 2: 2*25 = -> 4 operations
4 是请求答案
输入 2:
3 4 8
5 4 2
3 2 4 1
42
可能的方式:
案例一:42 -> 2 operations(直接输入)
案例 2:5*4*2+2 = -> 8 operations
..........其他一些方法
2 是请求答案
我没有找到解决这个问题的正确方法。
有人可以提出一些解决问题的方法吗?
【问题讨论】:
-
使用 BFS 解决问题。
-
到目前为止,您对如何解决这个问题有任何具体的想法(除了“也许我可以使用 DP 或递归”)?如果提问者没有明显地尝试解决问题,有些人可能会犹豫提供帮助。
-
运算是否有优先级,或者我们可以假设评估是从左到右进行的,即
1+2*3 = 3*3 = 9? -
"2*25= -> 4 次操作" 如果每次按下按钮都是一次操作,那不应该是 5 次操作吗?
-
@Chris 你是对的。操作数为 5 。对于那个很抱歉。我将在问题陈述中更新相同的内容
标签: algorithm recursion dynamic-programming memoization