3273. 二十四点

3273. 二十四点_第1张图片

3273. 二十四点_第2张图片 

#include
using namespace std;
mapmp;
void init(){
	mp['+']=mp['-']=1;
	mp['x']=mp['/']=2;
}
int oper(char t,stack&op,stack&num){
	int k1=num.top();num.pop();
	int k2=num.top();num.pop();
	if(t=='+')return k1+k2;
	if(t=='-')return k2-k1;
	if(t=='x')return k1*k2;
	if(t=='/')return k2/k1;
}

void kk(char t,stack&op,stack&num){
	if(t>='0'&&t<='9'){
		num.push(t-'0');
	}else{
		if(op.size()!=0){
			if(mp[t]<=mp[op.top()]){
			int cnt=oper(op.top(),op,num);
			op.pop();
			op.push(t);
			num.push(cnt);
		}else{
			op.push(t);
		}
		}else{
			op.push(t);
		}
	}
}
int main(){
	int n;
	cin>>n;
	init();
	while(n--){
		string str;
		cin>>str;
		stackop;
		stacknum;
		for(auto t:str){
			kk(t,op,num);
		}
		while(!op.empty()){
			char t=op.top();
			op.pop();
			int kk=oper(t,op,num);
			num.push(kk);
		}
		if(num.top()==24)cout<<"Yes"<

 

你可能感兴趣的:(暑假刷题,c++,算法,数据结构)