CCF - 20190302 24.2

参照

 

この質問は算術で、我々はそれを解決するためにスタックを使用します

テンプレートクラスのスタックC ++を使用します

#include <スタック>          // ヘッダ

スタック < INT > NUM;      // スタックint型の定義

num.pushを();             // スタックのスタック要素に

num.pop();              //は、スタックを削除上の要素

num.topは();              // スタックの要素を返し、除去しない   

num.emptyを();            // リターンスタックが空である

num.size();             // スタックの要素の現在の数を返します  

1.文字が数字で、スタックにNUM

文字は「+」である場合には2、記号がスタックに格納されます

3文字が「 - 」、なぜなら追加の数の反対に等しい減少した数の、次の文字が格納されているようにNUMスタックをネゲート、スタックストアは「+」記号

4.文字が「X」がある場合は、現在の文字は次の文字qとP、Qの* Pの預金NUMを取ります

5.文字は「/」、次の文字qとP、Qを取るために、現在の文字/ P店numがある場合には

コード:

#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
int n;
char str[10];
stack<int> num;
stack<char> sign;
int main()
{
    scanf("%d",&n);
    getchar();
    while(!num.empty()) num.pop();
    while(!sign.empty()) sign.pop();
    for(int i=0;i<n;i++)
    {
        gets(str);
        int j=0;
        while(j<strlen(str))
        {
            if(str[j]>'0'&&str[j]<='9')
            {
                num.push(str[j]-'0');
            }
            else if(str[j]=='+')
            {
                sign.push('+');
            }
            else if(str[j]=='-')
            {
                j++;
                num.push((-1)*(str[j]-'0'));
                sign.push('+');
            }
            else if(str[j]=='x')
            {
                int q=num.top();
                num.pop();
                j++;
                int p=str[j]-'0';
                num.push(q*p);
            }
            else if(str[j]=='/')
            {
                int q=num.top();
                num.pop();
                j++;
                int p=str[j]-'0';
                num.push(q/p);
            }
            j++;
        }
        while(!sign.empty())
        {
            int q=num.top();
            num.pop();
            int p=num.top();
            num.pop();
            sign.pop();
            num.push(q+p);
        }
        //printf("%d\n",num.top());
            if(num.top()==24) printf("Yes\n");
        else printf("No\n");
    }
    
    
    return 0;
}

 

おすすめ

転載: www.cnblogs.com/ellen-mylife/p/11110127.html