【CCF历年题题解】201903-2 二十四点

30分代码,不知道错在哪里

#include <iostream>
#include <stack>

using namespace std;


int main()
{
    
    
    int n;
    cin >> n;
    
    for(int i=0;i<n;i++)
    {
    
    
        string s;
        cin >> s;
        
        stack<char> sign;
        stack<int> nums;
        while(sign.size()) sign.pop();
        while(nums.size()) nums.pop();
        
        for(int j=0;j<s.size();j++)
        {
    
    
            if(s[j] >= '0' && s[j] <= '9') nums.push(s[j] - '0');
            else
            {
    
    
                if(s[j] == '+' || s[j] == '-') sign.push(s[j]);
                else
                {
    
    
                    int a = nums.top();
                    nums.pop();
                    if(s[j] == 'x') nums.push(a * (s[j + 1] - '0')) ;
                    else nums.push(a / (s[j + 1] - '0') ); 
                    j ++;
                }
            }
        }
        
        while(sign.size())
        {
    
    
            char c = sign.top();sign.pop();
            int a = nums.top(); nums.pop();
            int b = nums.top(); nums.pop();
            if(c == '+')
            {
    
    
                nums.push(a + b);
            }
            else nums.push(b- a); // 由于栈的关系,后进先出
        }

        if(nums.top() == 24) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    
    return 0;
}

100分代码

代码思路:x和/先算,-变 +

#include <iostream>
#include <stack>

using namespace std;


int main()
{
    
    
    int n;
    cin >> n;
    
    for(int i=0;i<n;i++)
    {
    
    
        string s;
        cin >> s;
        
        stack<char> sign;
        stack<int> nums;

        
        for(int j=0;j<s.size();j++)
        {
    
    
            if(s[j] >= '0' && s[j] <= '9') nums.push(s[j] - '0');
            else
            {
    
    
                if(s[j] == '-') nums.push( -(s[j + 1] - '0')),j ++;
                else if(s[j] == 'x')
                {
    
    
                    int a = nums.top();
                    nums.pop();
                    nums.push(a * (s[j + 1] - '0'));
                    j ++;
                }
                else if(s[j] == '/')
                {
    
    
                    int a = nums.top();
                    nums.pop();
                    nums.push(a /(s[j + 1] - '0'));
                    j ++;
                }
            }
        }
        
        int sum = 0;
        while(nums.size()) sum += nums.top(), nums.pop();
        
        if(sum == 24) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
        
        
    }
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43154149/article/details/108006139