Fork me on GitHub

CCF--二十四点

陷阱很多 要细心 ,每一步都要清晰 不然很容易就报错

  1. 这里的乘号为 x
  2. 一个符号对应一个数字 符号用好之后 还剩一个数字
  3. 四则运算都要用数字进行
  4. debug真是个好东西
import java.util.Scanner;
import java.util.Stack;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for (int i = 0; i < n; i++) {
			String str = sc.next();
			if (is_24(str))
				System.out.println("Yes");
			else
				System.out.println("No");
		}
	}

	public static boolean is_24(String str) {
		Stack<String> stack = new Stack<String>();
		Stack<Integer> nums = new Stack<Integer>();
		int ans = 0;
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i) == '+')
				stack.push(str.charAt(i) + "");
			else if (str.charAt(i) == '-')
				stack.push(str.charAt(i) + "");
			else if (str.charAt(i) == 'x') {
				int flag = str.charAt(i + 1) - '0';
				int temp = nums.pop() * flag ;
				nums.push(temp);
				i++;
			} else if (str.charAt(i) == '/') {
				int flag = str.charAt(i + 1) - '0';
				int temp = nums.pop() / flag;
				nums.push(temp);
				i++;

			} else if (str.charAt(i) - '0' <= 9 && str.charAt(i) - '0' >= 0)
				nums.push(str.charAt(i) - '0');
		}
		while (!stack.isEmpty()) {
			if (stack.peek().equals("-"))
				ans += nums.pop() * (-1);
			else if (stack.peek().equals("+"))
				ans += nums.pop();
			stack.pop();
		}
		ans += nums.pop();
		if (ans == 24)
			return true;
		else
			return false;
	}
}
posted @ 2019-07-26 13:39  cznczai  阅读(919)  评论(0编辑  收藏  举报