这是上一次考csp时遇到的一道简单的问题,但是当时太菜了没有写出来。
问题描述:
直接上图
解决思路:
标准的表达式求解,可以用符号栈和数值栈来存放运算符和数值,需要注意的是从左到右扫描的时候
遇到 ‘-’ 号可以转换成‘ +’ 号,遇到‘X’和‘/’直接计算,最后 算‘+’运算。
代码如下:
#include<iostream> #include<stack> using namespace std; stack<int> num; stack<char> expr; int n; char a[8]; int main() { cin>>n; int j,k; while(n--) { cin>>a; //cout<<a; for(int i=0;i<7;i++) { if(a[i]>='0'&&a[i]<='9') num.push(a[i]-'0'); else if(a[i]=='+') expr.push(a[i]); else if(a[i]=='-') { expr.push('+'); num.push(-(a[++i]-'0')); } else if(a[i]=='x') { j=num.top(); num.pop(); num.push(j*(a[++i]-'0')); } else{ j = num.top(); num.pop(); num.push(j/(a[++i]-'0')); } } while(!expr.empty()) { expr.pop(); j = num.top(); num.pop(); k=num.top(); num.pop(); num.push(j+k); } //cout<<num.top()<<endl; if(num.top()==24) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
大功告成了,提交查看:
这就是本题的求解。
(由于本人是菜鸡(刚刚开始学习),大佬们如果看到勿喷)。