【发布时间】:2016-06-24 06:57:43
【问题描述】:
我最近一直在尝试找到解决此问题的方法,但到目前为止我没有成功。
我正在考虑进行操作a # b # c # d,其中 a、b、c 和 d 是预定义的常量,# 可以取以下任何运算符的值 '+'、'-'、'*'、' /'。
我正在考虑为 # 中的所有运算符替换找到 a # b # c # d 的所有可能(不同)解决方案。
我正在考虑以下几行的逻辑:
// Global declaration of an array list
static ArrayList<Double> values;
String[] chars = {"+", "-", "*", "/"};
int totalSolutions = 0;
values = new ArrayList<Integer>();
for (int i=0; i<chars.length; i++){
for (int j=0; j<chars.length; j++){
for (int k=0; k<chars.length; k++){
if (isNew(a chars[i] b chars[j] c chars[k] d)) totalSolutions += 1;
}
}
}
public static boolean isNew(double value){
if (values.contains(value)) return false;
else values.add(value);
return true;
}
isNew() 是一个函数,它只检查获得的新解决方案是否与之前获得的所有解决方案不同。
我还没有找到在操作数之间应用运算符的方法。
非常感谢您对此的任何帮助。
【问题讨论】:
-
你的实现会忽略操作的优先级,如果a + b * c,它会先计算b * c吗?
-
我更喜欢操作优先的实现。但现在没有它也行。
-
你能贴出 isNew 函数的代码吗?我不认为它在做它应该做的事情
-
看看stackoverflow.com/a/37712870/1090562 可能会给你一些想法。
-
嗯,在我的情况下它并不明显,因为结果不明显(总是 8)。但我明白,你的意思。但是,我认为您必须编写一个小解析器和计算器。