题目链接
#include<bits/stdc++.h> using namespace std; map<char,int> mp; char str[11]; int fun(int t2,int t1,char op) { if(op=='+') return t2+t1; else if(op=='-') return t2-t1; else if(op=='x') return t2*t1; else if(op=='/') return t2/t1; } int main() { int n; cin >> n; getchar(); mp['+']=mp['-']=1; mp['x']=mp['/']=2; while(n--) { stack<int> s1; stack<char> s2; gets(str); for(int i=0;i<7;i++) { if(isdigit(str[i])) s1.push(str[i]-'0'); else { if(s2.empty() || mp[s2.top()]<mp[str[i]]) s2.push(str[i]); else { int t1=s1.top(); s1.pop(); int t2=s1.top(); s1.pop(); char op=s2.top(); s2.pop(); int res=fun(t2,t1,op); s1.push(res); s2.push(str[i]); } } } while(s1.size()!=1) { int t1=s1.top(); s1.pop(); int t2=s1.top(); s1.pop(); char op=s2.top(); s2.pop(); int res=fun(t2,t1,op); s1.push(res); } if(s1.top()==24) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
#include<bits/stdc++.h> using namespace std; stack<char> op; stack<int> num; int n,m; void eval() { int b=num.top(); num.pop(); int a=num.top(); num.pop(); char t=op.top(); op.pop(); int res; if(t=='+') res=a+b; else if(t=='-') res=a-b; else if(t=='x') res=a*b; else if(t=='/') res=a/b; num.push(res); } int main() { cin >> n; getchar(); unordered_map<char,int> mp{{'+',0},{'-',0},{'x',1},{'/',1}}; while(n--) { string str; getline(cin,str); for(int i=0;i<str.size();i++) { if(isdigit(str[i])) num.push(str[i]-'0'); else { while(op.size() && mp[op.top()]>=mp[str[i]]) eval(); op.push(str[i]); } } while(op.size()) eval(); if(num.top()==24) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }