日期:2014-05-20 浏览次数:21047 次
import java.util.*;
import javax.script.*;
public class Test {
public static void main(String[] args) throws Throwable {
int[] num = {2, 4, 11, 7};
//int[] num = {11, 12, 13, 1};
List<String> list = exp(num);
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByName("JavaScript");
for (String s : list) {
Object v = se.eval(s);
double d = 0;
if (v instanceof Integer) {
d = ((Integer)v).intValue();
} else if (v instanceof Double) {
d = ((Double)v).doubleValue();
}
if (d - 24 == 0) {
System.out.printf("%s=%d\n", s, (int)d);
}
}
}
public static List<String> exp(int[] num) {
List<String> list = new ArrayList<String>();
if (num==null || num.length < 2) return list;
if (num.length == 2) {
list.add(String.format("%s+%s", num[0], num[1]));
list.add(String.format("%s-%s", num[0], num[1]));
list.add(String.format("%s-%s", num[1], num[0]));
list.add(String.format("%s*%s", num[0], num[1]));
list.add(String.format("%s.0/%s", num[0], num[1]));
list.add(String.format("%s.0/%s", num[1], num[0]));
}
int[] tmp = new int[num.length-1];
for (int i=0; i<num.length; i++) {
for (int j=0, k=0; j<num.length; j++) {
if (j != i) tmp[k++] = num[j];
}
List<String> sub = exp(tmp);
for (String s : sub) {
list.add(String.format("%s+%s", num[i], s));
list.add(String.format("%s-%s", num[i], s));
list.add(String.format("%s-%s", s, num[i]));
list.add(String.format("%s*%s", num[i], s));
list.add(String.format("%s*%s", s, num[i]));
list.add(String.format("%s.0/%s", num[i], s));
list.add(String.format("%s/%s.0", s, num[i]));
String[] sa = s.split("\\d+([.]\\d+)?");
if (! s.startsWith("(")) {
if (sa[1].equals("+") || sa[1].equals("-")) {
list.add(String.format("%s*(%s)", num[i], s));
list.add(String.format("%s.0/(%s)", num[i], s));
list.add(String.format("(%s)/%s.0", s, num[i]));
} else {
list.add(String.format("%s.0/(%s)", num[i], s));
int index = s.indexOf(sa[1]);
String b = s.substring(0, index);
String c = s.substring(index);
list.add(String.format("(%s+%s)%s", num[i], b, c));
list.add(String.format("(%s-%s)%s", num[i], b, c));
list.add(String.format("(%s-%s)%s", b, num[i], c));
list.add(String.format("(%s*%s)%s", num[i], b, c));
list.add(String.format("(%s.0/%s)%s", num[i], b, c));
list.add(String.format("(%s/%s.0)%s", b, num[i], c));
}
}
}
}
return list;
}
}