日期:2014-05-20 浏览次数:20905 次
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; } }