CCF--二十四点
陷阱很多 要细心 ,每一步都要清晰 不然很容易就报错
- 这里的乘号为 x
- 一个符号对应一个数字 符号用好之后 还剩一个数字
- 四则运算都要用数字进行
- 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;
}
}