编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是 100 的程序,并输出所有的可能性

来源:互联网 发布:知乎 教育培训 编辑:程序博客网 时间:2024/06/05 10:44

前几天在博客园的外文翻译里看到一篇《每个程序员1小时内必须解决的5个编程问题》,前4题还不是很难,但是第五题就有点看似简单,写起来却很蛋疼。

(虽然头部和其他博文有点相似但是解决办法不太一样,而且好理解)


题目是这样的:

编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是 100 的程序,并输出所有的可能性。
例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。

你能在多长时间写完呢?

下面是我的解法(Java):


   @Test    public void test05() throws ScriptException{        String stringArray [] = new String[]{"+","-",""};        List<String> resultList=new ArrayList<String>();        for(int a=0;a<stringArray.length;a++){            for(int b=0;b<stringArray.length;b++){                for(int c=0;c<stringArray.length;c++){                    for(int d=0;d<stringArray.length;d++){                        for(int e=0;e<stringArray.length;e++){                            for(int f=0;f<stringArray.length;f++){                                for(int g=0;g<stringArray.length;g++){                                    for(int h=0;h<stringArray.length;h++){                                        String result=1+stringArray[a]+2+stringArray[b]+                                                3+stringArray[c]+4+stringArray[d]+5+stringArray[e]+                                                6+stringArray[f]+7+stringArray[g]+8+stringArray[h]+9;                                        if(getSum(result)==100){                                            resultList.add(result);                                        }                                    }                                }                            }                        }                    }                }                            }        }        for(int i=0;i<resultList.size();i++){            System.out.println(resultList.get(i)+"=="+getSum(resultList.get(i)));        }    }    public int  getSum(String str) throws ScriptException{         ScriptEngine se = new ScriptEngineManager().getEngineByName("JavaScript");         double  d = (double) se.eval(str);         //System.out.println(d);         return (int)d;    }

 

基本思路就是:暴力破解,先生成表达式字符串,然后对表达式字符串进行计算。



阅读全文
1 0
原创粉丝点击