问题描述
要求是这样的:写一个methodcalculations,method有两个parameters。一个intnumber是最后想要的结果,另一个parameter是一个chararray包括+,-,*,/,%五种运算符号其中任意一到五个。method要return所有能得到number的数学式,数学必须由1,2,3,4,5,6,7,8,9组成,数字顺序不能改变。每个数字之间必须有一个运算符号。举个例子如果calculations(100,{‘+’,’-‘,’*’,’/’})1+2+3+4+5+6+7+8*9应该是其中一个正确答案可以用任意library可以用privatemethod。请问各位大神有没有什么idea?
解决方案
本帖最后由 sinat_18158113 于 2014-07-21 14:22:14 编辑
解决方案二:
解决方案三:
我想:这个问题不是很难(如果能让你随意的加括号才是更难的)可以分成两步:1.得到表达式2.计算表达式的结果并判断他是否是参数1关于第二步应该有好几种方法:1.你可以找现成的库(抱歉我不知道库的名字)2.你或许可以用java中的某种脚本语言(JavaScriptGroovyJPythonJRuby)3.你还可以用Antlr写个parser(Antlr中有关于四则运算的例子)4.如果上面的3种方法都不行。那么你可以尝试着用Java去生成另一个Java文件并手动编译执行。关于第一步(得到表达式)应该是挺简单的。123456789只是在这几个数字之间填符号(一共只能填8个符号)如果参数2的长度是1则只有1种可能如果参数2的长度是2则只有2^8=256种可能如果参数2的长度是3则只有3^8=种可能如果参数2的长度是4则只有4^8=种可能如果参数2的长度是5则只有5^8=种可能可以创建一个8位的N进制数(N的取值是:1,2,3,4,5之一)并且这个N进制数能够根据{'+',"*"}而输出一个表达式比如8位的2进制数01111101在{'+','-'}的时候会输出1+2-3-4-5-6-7+8-9在{'+','*'}的时候会输出1+2*3*4*5*6*7+8*9再比如比如8位的3进制数01201201在{'+','-','*'}的时候会输出1+2-3*4+5-6*7+8-9