zoukankan      html  css  js  c++  java
  • ccf——20190302二十四点

    参考

    这道题是四则运算,我们用栈来解决它

    使用c++中的模板类stack

    #include<stack>         //头文件
    
    stack <int> num;      //定义一个int型栈
    
    num.push();            //在栈顶上堆进一个元素
    
    num.pop();             //删除掉栈顶上的元素
    
    num.top();             //返回栈顶的元素,并不会删除  
    
    num.empty();           //返回栈是否为空
    
    num.size();            //返回当前栈中元素的个数  

    1.当字符为数字时,存入num栈中

    2.当字符是“+”时,存入sign栈中

    3.当字符是“-”时,因为减一个数等于加一个数的相反数,所以将下一个字符取反存入num栈,sign栈存入“+”

    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
    ",num.top());
                if(num.top()==24) printf("Yes
    ");
            else printf("No
    ");
        }
        
        
        return 0;
    }
  • 相关阅读:
    71 是否同一棵二叉搜索树(25 分)
    75 平衡二叉树的根(25 分)
    72 树种统计(25 分)
    2018(容斥定理 HDU6286)
    直观的理解计算机中的数值编码
    如何关闭emacs开启时自己打开的欢迎界面
    图论:最短路径:广度优先搜索(C语言实现)
    ubunut 14.04 将Caps Lock设置为Control
    邻接表:C语言实现
    队列(C语言实现)
  • 原文地址:https://www.cnblogs.com/ellen-mylife/p/11110127.html
Copyright © 2011-2022 走看看