#include <bits/stdc++.h>
#include <queue>
#include <iostream>
using namespace std;
int main() {
int n;
string s;
cin >> n;
queue<int> num;
queue<char> op;
while(n--) {
cin >> s;
s.push_back('+');
for(int i = 1; i < s.size(); i+=2) {
int t = s[i-1] - '0';
for ( ;i < s.size() && s[i] == 'x' || s[i] == '/'; i += 2) {
t = (s[i] == 'x') ? t * (s[i+1]-'0'): t / (s[i+1] - '0');
}
num.push(t);
op.push(s[i]);
}
num.push(0);
int ans = num.front();
num.pop();
while(!op.empty()) {
char opration = op.front();
op.pop();
ans = (opration == '+') ? ans + num.front() : ans - num.front();
num.pop();
}
cout << (ans == 24 ? "Yes" : "No" )<< endl;
//cout << ans;
}
return 0;
}
這個題目最一般的思路可能是按照數據結構課所學的,用后綴表達式,但是
https://blog.csdn.net/richenyunqi/article/details/89188626提出了這樣的思路:
先算乘除,把表達式變成只有加減,然后計算加減即可。
(這體現了一種“減而治之”的思想——把大問題化簡成小問題,把困難問題化簡成簡單問題)
具體思路見鏈接