您的位置:首页 > 其它

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

2017-08-24 15:23 796 查看

前几天在博客园的外文翻译里看到一篇《每个程序员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+
                                                3+stringArray[c]+4+stringArray[d]+5+stringArray[e]+
                                                6+stringArray[f]+7+stringArra
4000
y[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;
    }


 

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





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐