一二三四五 上山打老虎

CCF-CSP-2019-03-2二十四点[STL队列应用]

题目链接:http://118.190.20.162/view.page?gpid=T88

反思:不管是queue.front() 还是queue.back()都可以直接修改队头和队尾的值,不用弹出后计算完再加入。
代码:

#include<bits/stdc++.h>

using namespace std;
queue<int>qu;
queue<char>quc;
string str;
int main (){
    int n;
    ios::sync_with_stdio(false);
    cin>>n;
    int a,b;
    for(int i=0;i<n;i++){
        cin>>str;
        qu.push(str[0]-'0');
        for(int j=1;j<=6;j+=2){
            b=str[j+1]-'0';
            if(str[j]=='x'){
               qu.back()*=b;
            }
            else if(str[j]=='/'){
                qu.back()/=b;
            }
            else {
                quc.push(str[j]);
                qu.push(b);
            }
        }
        while(quc.size()){
            a=qu.front();
            qu.pop();
            if(quc.front()=='+'){
                qu.front()+=a;
            }
            else qu.front()=a-qu.front();
            quc.pop();
        }
        if(qu.front()==24)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
        while(qu.size())qu.pop();
    }

    return 0;
}

错误代码:
错误原因,使用栈导致计算+-法的时候是从右往左进行,导致错误
加减法从右往左和从左往右计算的结果不一样

#include<bits/stdc++.h>

using namespace std;

stack<int> st;
stack<char>sch;
string strs[105];
string str;
int main (){
    int n;
    ios::sync_with_stdio(false);
    cin>>n;
    int a,b;
    for(int i=0;i<n;i++)cin>>strs[i];
    for(int i=0;i<n;i++){
        str=strs[i];
        //cin>>str;
        st.push(str[0]-'0');
        for(int i=1;i<6;i+=2){
            a=st.top();
            b=str[i+1]-'0';
            //cout<<a<<" "<<b<<endl;
            if(str[i]=='x'){
                st.pop();
                st.push(a*b);
            }
        else if(str[i]=='/'){
            st.pop();
            st.push(a/b);
        }
        else if(str[i]=='+'||str[i]=='-'){
            sch.push(str[i]);
            st.push(b);
        }
        }
        while(sch.size()){
            b=st.top();
            st.pop();
            a=st.top();
            st.pop();
            if(sch.top()=='+'){
                st.push(a+b);
            }
            else {
                st.push(a-b);
            }
            sch.pop();
            //cout<<st.top()<<endl;
        }
        cout<<st.top()<<endl;
        if(st.top()!=24)cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
        while(st.size()){
            st.pop();
        }
    }


    return 0;
}

/*
10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4/5

*/

posted @ 2021-03-30 16:18  黒川川  阅读(83)  评论(0)    收藏  举报