第十六次CCF计算机软件能力认证 二十四点 题型:模拟

92 阅读1分钟

3273. 二十四点 - AcWing题库

视频解析: SCUACM每日一题#21 二十四点_哔哩哔哩_bilibili

因为*/的优先级比+-高,所以我们先算*/

#include<bits/stdc++.h>
using namespace std;
queue<int> num;
queue<char>op;
int main()
{
    int n;cin>>n;
    while(n--)
    {
       string s;cin>>s;
       s+='+';       //手动添加最后一个操作符
       
       int ans=0,now=0;
       
       for(int i=0;i<s.size();i++)
       {
           char c=s[i];
           if(c=='x')now*=s[++i]-'0';
           else if(c=='/')now/=s[++i]-'0';
           else if(c>='0'&&c<='9')now=c-'0';
           else 
           {
               num.push(now);  //num存储运算数
               op.push(c);     //op存储运算符
           }
       }
  

    num.push(0);      //第一位运算数和0进行运算,对结果没有影响
    ans=num.front();  //取出第一位运算数
    num.pop();        //弹出第一位运算数
    
    //把所有+-运算符全部用完
    while(op.size())
    {
        char c=op.front();   //取出第一位+-运算符
        op.pop();            //弹出第一位+-运算符
    
        if(c=='+')ans+=num.front();
        else ans-=num.front();
        
        num.pop();          //弹出当前运算数
    } 
    
    if(ans==24)cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
    }
    return 0;
}