你好,看了你关于 输入四个数用加减乘除得到期望值的算法,不是很懂,能不能告诉我的大体思路

我的QQ:675864993

思路:

举个例子,假如四数字是:16,2,3,5..期望值是:9

1、这个运算式分两种情况,两步走和三步走。两步走:(2+16)-(2*5)=9,即这种情况,第一步,两个括号的运算,第二步,俩括号运算得到的值再运算一次;三步走:[(2+3)*5]-16=9,第一步,先俩操作数,第二步,同第三个操作数运算,第三步,同第四个操作数运算。 这也就是最内层的for (double i = 0; i < 2; i++) 循环。
2、这两步各调用一个方法进行输出结果(把符合题意的算式打印出来),即fun()和func()方法。fun和func方法又调用oper和arith方法对两个操作数进行加减乘除运算。

3、控制台输入的数字是有序的,而在运算中,这些数字可以在算式的任何位置,为了找出所有符合题意的答案,对这四个数字进行了排列,用了四个for嵌套循环和三个if判断,这也是出现一堆"}"的原因。
4、去重复。(3+16)-(2*5)=9这样的算式符合题意,(3+16)-(5*2)=9也符合题意,但输出一个就行了。程序中用了StringBuffer buffer。把每次输出的算式拼到buffer内,同时如果运算符是"+"、"*",则不仅拼上a+(*)b,也拼上b+(*)a,下次再输出的时候判断,如果算式存在于buffer中则不输出来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
相似回答