24点这题,可以用栈做,也可以直接用数组做,做的时候现将数据全部输入,先乘除后加减,每 次运算后,len-2,同时将结果放入前面一个数中
using namespace std;
#include<bits/stdc++.h>
int main(){
int n;
int s[7];
char t;
cin>>n;
while(n--){
int i,j,k;
for(i=0;i<7;i++){
cin>>t;
if(t>='0' && t<='9') s[i]=t-'0';
else if(t == '+') s[i]=7000;
else if(t == '-') s[i]=7001;
else if(t == 'x') s[i]=7010;
else if(t == '/') s[i]=7011;
}
//for(i=0;i<7;i++) cout<<s[i]<<" ";
int len=7;
bool flag=1;
while(len>1){//先乘除
if(flag == 0) break;
flag=0;
for(i=1;i<len;i++){
if(s[i] == 7010){
s[i-1]=s[i-1]*s[i+1];
for(k=i;k+2<len;k++){
s[k]=s[k+2];
}
flag=1;
len-=2;
break;
}
if(s[i] == 7011){
s[i-1]=s[i-1]/s[i+1];
for(k=i;k+2<len;k++){
s[k]=s[k+2];
}
flag=1;
len-=2;
break;
}
}
}
while(len>1){//后加减
for(i=1;i<len;i++){
if(s[i] == 7000){
s[i-1]=s[i-1]+s[i+1];
for(k=i;k+2<len;k++){
s[k]=s[k+2];
}
len-=2;
break;
}
if(s[i] == 7001){
s[i-1]=s[i-1]-s[i+1];
for(k=i;k+2<len;k++){
s[k]=s[k+2];
}
len-=2;
break;
}
}
}
if(s[0] == 24) cout<<"Yes"<<'\n';
else cout<<"No"<<'\n';
}
return 0;
}