JAVA实现5 5 5 5 5=2填运算符号,使等式成立
发布网友
发布时间:2022-05-01 23:46
我来回答
共5个回答
热心网友
时间:2022-06-25 05:42
挺好玩的一个东西,写着玩儿了.
用递归实现了一个, 可以自定义 5 5 5 5 ,也可以额 5 5 6 6 , 也可以 5 5 5 6 6 6
下面是代码
import java.util.ArrayList;
import java.util.List;
public class TestComputeUtil {
public static void main(String[] args) {
List<String> rightExpressions = getRightExpressions(7, 6,5,5,7);
System.out.println(rightExpressions);
}
/**
* 工具方法,得到符合期望值的四则运算表达式,如果结果集size为0,则说明没有结果
*
* <p>工具方法,得到正确的四则表达式</p>
* @param result 期望得到的结果
* @param parameter 所有的待计算的数字 例如:6,5,5,7
* @return List<String> 复合要求的结果,如果size为0 ,则说明没有符合结果的内容
* @throws
*/
public static List<String> getRightExpressions(int result , int...parameter){
List<String> resultExpressions = new ArrayList<String>();
if(parameter == null){
return resultExpressions;
}
computeResult(resultExpressions,new StringBuilder().append(parameter[0]), result , parameter[0] , 1, parameter);
return resultExpressions;
}
/**
* 根据指针(index)的位置,来进行四则运算.
*
* <p>根据指针(index)的位置,来进行四则运算.</p>
* @param resultExpressions 最终的结果集合,这里省事儿了,直接传进去了,当然,这种方法并不好,但省事儿,你懂得,哈哈
* @param expression 指针(index)前面所有的四则运算表达式
* @param result 期望的计算结果
* @param stepResult 指针(index)前面所有的四则运算表达式的结果
* @param index 指针位置
* @param parameter 参数数组
* @throws
*/
private static void computeResult(List<String> resultExpressions,StringBuilder expression , int result ,Integer stepResult,int index , int[] parameter){
if(parameter.length >= index+1){
computeResult(resultExpressions, expression, result, stepResult, index, parameter, CalculationSymbols.ADD);
computeResult(resultExpressions, expression, result, stepResult, index, parameter, CalculationSymbols.SUB);
computeResult(resultExpressions, expression, result, stepResult, index, parameter, CalculationSymbols.MULT);
computeResult(resultExpressions, expression, result, stepResult, index, parameter, CalculationSymbols.DIV);
}else {
if(result == stepResult){
resultExpressions.add(expression.toString());
}
}
}
/**
* 一个计算流程包括递归调用computeResult(List<String> resultExpressions,StringBuilder expression , int result ,Integer stepResult,int index , int[] parameter)这个方法
*
* <p>一个计算流程 , 在这里加减乘除都是一个完整的计算流程.如果以后还想增加别的运算符号的话,只需要修改一下计算方法,以及枚举类.便于扩充</p>
* @param resultExpressions
* @param expression
* @param result
* @param stepResult
* @param index
* @param parameter
* @param sign void
* @throws
*/
private static void computeResult(List<String> resultExpressions,StringBuilder expression , int result ,Integer stepResult,int index , int[] parameter , CalculationSymbols sign){
StringBuilder newExpression = new StringBuilder(expression);
int newResult = computeResult(stepResult, parameter[index], sign, newExpression);
computeResult(resultExpressions, newExpression, result, newResult, index+1, parameter);
}
/**
* 计算
*
* <p>计算</p>
* @param left
* @param right
* @param sign
* @return int
* @throws
*/
private static int computeResult(int left , int right , CalculationSymbols sign, StringBuilder expression){
switch (sign) {
case ADD:
expression.append("+").append(right);
return left + right;
case SUB:
expression.append("-").append(right);
return left - right;
case MULT:
expression.append("*").append(right);
return left * right;
case DIV:
expression.append("/").append(right);
return left / right;
default:
throw new UnsupportedOperationException("不支持的操作类型!");
}
}
}
/**
* 计算符号枚举
*
* <p>计算符号枚举</p>
* @author an
* @version V1.0
*/
enum CalculationSymbols{
ADD,SUB,MULT,DIV
}
额,刚看到了一个问题,是这样的,不能用Integer , 需要把所有的Integer给替换成为Double,因为,1/2 = 0 ,你懂的..只需要修改参数类型,以及计算的地方,即可
手打~~
热心网友
时间:2022-06-25 05:42
/*我说下思路:有5个数字,有4个空隔要填写,所以可以把这几个运行符放在一个字符数组里,然后去
*遍历地填写到4个空隔中,比如第一次是5+5+5+5+5 第二次就 5+5+5+5-5 .....然后再解析这
*个字符串,看答案是不是等于2(至于怎么解析这个加减乘除字符串可以参考这里:
* http://zhidao.baidu.com/question/83601633.html)
*/
热心网友
时间:2022-06-25 05:43
1、刚刚是从快速模式下写的问题,不好意思没看清。
2、看了具体要求,这个需要编程实现才可以。
符号就4个,填4个,用穷举解决这个问题最简单了,复杂度也就4*4。
试下看吧。
热心网友
时间:2022-06-25 05:44
(5+5)*5/(5*5)=2
热心网友
时间:2022-06-25 05:44
5x5-5x5=0