需求:写程序在1,2,…,9(保持这个顺序)之间可任意放+或-或都不放使其结果等于100,输出所有可能的放法。例如:1 + 2 + 3 – 4 + 5 + 6 + 78 + 9 = 100。
分析:
我们可以理解为有8个位置可以用来放置:“+”、“-”、“”,也就是说表达式的左侧一共有3^8=6561种可能。我们只需递归出它们同时检表达式的结果是否等于100即可。
实现:
根据上面的分析,在实现的过程当中有两个问题:
1:怎样得到所有的表达式;
2:如何求表达式的值。
第一个问题思路:用递归插入“+”、“-”、“”,直到插入最后一个数字;
第二个问题的思路:使用栈先将一般的中缀表达式转成后缀表达式,然后再用栈将后缀表达式的值求出,具体思路可以去看下栈在计算表达式值的应用。参考:中缀表达式转后缀表达式并求值。
代码:
import java.util.Stack;
import java.util.Vector;
public class Intermediate {
static String[] symbol = { "+", "-", "" };
static String[] num1 = { "1", "2", "3", "4", "5", "6", "7", "8", "9