日期:2014-05-20  浏览次数:20834 次

一个java算法小题,大家帮帮忙

    匪警请拨110,即使手机欠费也可拨通!

    为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!

    某批警察叔叔正在进行智力训练:

    1 2 3 4 5 6 7 8 9 = 110;

    请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。

    请你利用计算机的优势,帮助警察叔叔快速找到所有答案。

    每个答案占一行。形如:

12+34+56+7-8+9
123+4+5+67-89
......

    已知的两个答案可以输出,但不计分。
    
    各个答案的前后顺序不重要。

------解决方案--------------------

    private static void r(int i, String pre) {
        for (String m : new String[]{"+", "-", ""}) {
            if (i == 9) {
                ScriptEngineManager sem = new ScriptEngineManager();
                ScriptEngine jsEngine = sem.getEngineByName("JavaScript");
                try {
                    String rs = jsEngine.eval(pre + m + i).toString();
                    if (rs.equals("110.0")) {
                        System.out.println(pre + m + i + "=110");
                    }
                } catch (ScriptException e) {
                    e.printStackTrace(System.err);
                }
            } else {
                r(i + 1, pre + m + i);
            }
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        r(2, "1");
    }


1+2+34+5+67-8+9=110
1+234-56-78+9=110
1-2+3+45-6+78-9=110
12+3+45+67-8-9=110
12+34+56+7-8+9=110
12-3+4-5+6+7+89=110
123+4+5+67-89=110
123+4-5-6-7-8+9=110
123-4+5-6-7+8-9=110
123-4-5+6+7-8-9=110