CCF-CSP 20190302:二十四点

#include<iostream>
#include<vector> 
using namespace std;

int solve(int data1,char op,int data2){
	if(op=='+'){
		return data1+data2;
	}else if(op=='-'){
		return data1-data2;
	}else if(op=='x'){
		return data1*data2;
	}else if(op=='/'){
		return data1/data2;
	}
}

int main(){
	int n;
	cin>>n;
	vector<int> data_stack;   //data stack;
	vector<char> op_stack;    //op stack
	vector<int> data_s;   //data stack;
	vector<char> op_s;    //op stack
	int res;
	for(int i=0;i<n;i++){
		string in_str;
		cin>>in_str;
		for(int j=1;j<in_str.length();j=j+2){
			int pre_data=in_str[j-1]-'0';
			int next_data=in_str[j+1]-'0';
			
			char op = in_str[j];

			if(op=='+'||op=='-'){
				if(!data_stack.empty()){
					pre_data = data_stack.back();
					data_stack.pop_back();
				} 
				data_stack.push_back(pre_data);
				op_stack.push_back(op);
				data_stack.push_back(next_data);
			}else if(op=='x'||op=='/'){
				if(!data_stack.empty()){
					pre_data = data_stack.back();
					data_stack.pop_back();
				} 
			
				next_data=in_str[j+1]-'0';
				res = solve(pre_data,op,next_data);
				data_stack.push_back(res);
			}
			
		}
		for(vector<int>::iterator it=data_stack.end()-1;it!=data_stack.begin()-1;it--){
				data_s.push_back(*it);
		}
		for(vector<char>::iterator it=op_stack.end()-1;it!=op_stack.begin()-1;it--){
				op_s.push_back(*it);
		}
		while(!op_s.empty()){
			int pre_data = data_s.back();
			data_s.pop_back();

			char op = op_s.back();
			op_s.pop_back();
			
			int next_data = data_s.back();
			data_s.pop_back();
			
			res = solve(pre_data,op,next_data);
			data_s.push_back(res);
		}
		
		
		res = data_s.back();
		if(res==24){
			cout<<"Yes"<<endl;
		}else{
			cout<<"No"<<endl;
		}
		data_stack.clear();
		op_stack.clear();
		data_s.clear();
		op_s.clear();
	}
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值