CCF-CSP 201903-2 二十四点

import java.util.Scanner;
import java.util.Stack;
public class Main {
	public static int priority(char c) { // 0最高 1最小
		if(c=='+' || c=='-') return 1;
		else return 0;
	}
	public static int Callate(String formula) {
		//给出一个式子 计算这个式子的最后结果
		//建立一个操作符栈
		Stack CaoZuoFu = new Stack<>();
		//建立一个操作数栈
		Stack CaoZuoShu = new Stack<>();
		for(int i=0;i<7;i++) {
			char c = formula.charAt(i);
			if(Character.isDigit(c)) CaoZuoShu.push(Character.getNumericValue(c));
			else {
				if(priority(c)==1) CaoZuoFu.push(c);
				else { 
					int temp= (int) CaoZuoShu.pop();
					int temp1 = Character.getNumericValue(formula.charAt(++i));
					if(c=='x') CaoZuoShu.push(temp*temp1);
					else CaoZuoShu.push(temp/temp1);
				}
			}
		}
		//开始进行整个式子的操作 这时操作符栈里只有+-
		//大概两个栈都需要倒置一下....
		Stack CaoZuoFu1 = new Stack<>();
		Stack CaoZuoShu1 = new Stack<>();
		while(!CaoZuoFu.empty()) CaoZuoFu1.push((CaoZuoFu).pop());
		while(!CaoZuoShu.empty()) CaoZuoShu1.push((CaoZuoShu).pop());
		while(!CaoZuoFu1.empty()) {
			int temp = (int) CaoZuoShu1.pop();
			int temp1 = (int) CaoZuoShu1.pop();
			char c = (char)CaoZuoFu1.pop();
			if(c=='+') CaoZuoShu1.push(temp+temp1);
			else CaoZuoShu1.push(temp-temp1);
		}
		return (int)CaoZuoShu1.pop();
	}
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int num = Integer.parseInt(s.nextLine());
		String[] str = new String[num];
		for(int i=0;i<num;i++) {
			str[i]=s.nextLine();
		}
		for(int i=0;i<num;i++) {
			if(Callate(str[i])==24) System.out.println("Yes");
			else System.out.println("No");
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值