1234567890中间加上+、-或者""后变成的等式结果为110

来源:互联网 发布:lvs与nginx区别 编辑:程序博客网 时间:2024/05/22 14:12
package org.lw.test;import java.util.ArrayList;import java.util.List;/** * 1234567890中间加上+、-或者""后变成的等式结果为110 * @author 古市轩 * @时间 2012-4-28上午 10:45:59 */public class Test110 {public static void main(String[] args) {String str = "1234567890";output(str);}//根据算式截取运算符public static List<Character> getOperation(String str){List<Character> list = new ArrayList<Character>();for(int i=0; i<str.length(); i++){if(str.charAt(i) == '+' || str.charAt(i) == '-'){list.add(str.charAt(i));}}return list;}//根据算式截取操作数public static List<Integer> getOperationNumber(String str){List<Integer> list = new ArrayList<Integer>();String[] s = str.split("\\+|-|\\*|/|&|=|(>=)|(<=)");for(int i=0; i<s.length; i++){list.add(Integer.parseInt(s[i]));}return list;}//计算结果public static int getResult(List<Character> operations, List<Integer> operationNumbers){int result = -1;if(operations.size() == 0){return operationNumbers.get(0);}else{result = operationNumbers.get(0);for(int i=0; i<operations.size(); i++){char ch = operations.get(i);switch(ch){case '+':result = result + operationNumbers.get(i + 1);break;case '-':result = result - operationNumbers.get(i + 1);}}}return result;}//判断是否符合并输出public static void output(String str){for(int i=0; i<Math.pow(3, str.length() - 1); i++){StringBuilder sb = new StringBuilder(str);String s = Integer.toString(i, 3); //转换成3进制for(int j=0; j<s.length(); j++){if('1' == s.charAt(s.length() -j -1)){sb.insert(s.length() - j, '+');}else if('2' == s.charAt(s.length() -j -1)){sb.insert(s.length() - j, '-');}}String string = sb.toString();if(getResult(getOperation(string), getOperationNumber(string)) == 110){System.out.println(string + " = 110");}}}}