本文主要是介绍二十四点(ccf 201903-2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
该题考察表达式计算,可以用Stack实现
具体代码
import java.util.*;public class Main7 {public static Map<Character,Integer> map = new HashMap<>();public static boolean isOp(char c){if(c=='+' || c=='-' ||c=='x' ||c=='/'){return true;}else{return false;}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int num = sc.nextInt();sc.nextLine();List<String> exprLst = new ArrayList<>();for(int i = 0; i < num; i++){String expr = sc.nextLine();exprLst.add(expr);}map.put('+',1);map.put('-',1);map.put('x',2);map.put('/',2);// String expr = "1x1+9-9";for(String expr : exprLst){StringBuilder sb = new StringBuilder();Stack<Character> stack = new Stack<>();Stack<String> compStack = new Stack<>();char[] arr = expr.toCharArray();for(char c : arr){if(!isOp(c)){sb.append(c);}else{if(stack.isEmpty()){stack.push(c);}else{if(map.get(c) > map.get(stack.peek())){stack.push(c);}else{while (!stack.isEmpty() && map.get(c) <= map.get(stack.peek())){char op = stack.pop();sb.append(op);}stack.push(c);}}}}while (!stack.isEmpty()){sb.append(stack.pop());}
// System.out.println(sb);char[] postArr = sb.toString().toCharArray();for(char c : postArr){if(!isOp(c)){compStack.push(String.valueOf(c));}else{int b = Integer.parseInt(compStack.pop());int a = Integer.parseInt(compStack.pop());switch (c){case '+':compStack.push(String.valueOf(a+b));break;case '-':compStack.push(String.valueOf(a-b));break;case 'x':compStack.push(String.valueOf(a*b));break;case '/':compStack.push(String.valueOf(a/b));break;default:break;}}}
// System.out.println(compStack.pop());if(Integer.parseInt(compStack.pop()) == 24){System.out.println("Yes");}else{System.out.println("No");}}}
}
这篇关于二十四点(ccf 201903-2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!