• CCF201903-2二十四点


     

     思路描述:最开始的思路是拿一个栈来存储数据和符号,在动手实践的过程中发现行不通,单个数字的char和int转换可以,但是加起来的数据两位数字就很难处理了。

    然后就去看了看别人的思路,给了我一个很好的启发就是把数据和符号分开存储,但是在处理减号时思路再次打乱,突然就想到了双端队列

    整理后的思路如下:(可能思路和我卡在同一个地方的更容易看明白我在说啥,尽量想让博客写的更容易理解些,会努力加油的!)

    贴下代码:

    #include<iostream>
    #include<cstring>#include<deque>
    
    using namespace std;
    
    deque<int> num;//数据队列
    deque<char> sign;//符号队列
    
    int main() {
        int n;
        cin >> n;
        char c[10];
        
        for (int i = 0; i < n; i++) {
            cin >> c;
            //每次开始前先将队列清空
            while (!num.empty())num.pop_back();
            while (!sign.empty())sign.pop_back();
            //遍历输入的数据
            for (int j = 0; j < 7; j++) {
                //数字压入数据队列
                if (c[j] >= '0'&&c[j] <= '9') num.push_back(c[j] - '0');
                else {
                    //对符号进行处理
                    //如果是+,先压入符号队列
                    if (c[j] == '+' || c[j]=='-') sign.push_back(c[j]);else if (c[j] == 'x') {
                        //运算后将运算结果压入队列中
                        int temp = num.back();
                        num.pop_back();
                        num.push_back(temp * (c[j + 1] - '0'));
                        j++;
                    }
                    else if (c[j] == '/') {
                        int temp = num.back();
                        num.pop_back();
                        num.push_back(temp / (c[j + 1] - '0'));
                        j++;
                    }
                }
            }
            //处理队列中剩余元素(进行加法运算)
            while (!sign.empty()) {
                int temp1 = num.front();
                num.pop_front();
                int temp2 = num.front();
                num.pop_front();
                if (sign.front() == '+')num.push_front(temp1 + temp2);
                else num.push_front(temp1 - temp2);
                sign.pop_front();
            }
            //判断数据队列中剩余的最后一个元素
            if (num.front() == 24) printf("%s
    ", "Yes");
            else printf("%s
    ", "No");
        }
    
        system("pause");
        return 0;
    }
    唯有热爱方能抵御岁月漫长。
  • 相关阅读:
    测试次数--蓝桥杯
    承压计算--蓝桥杯
    天梯赛--连续因子
    等差素数数列-蓝桥杯
    hdu-1237-简单计算器
    hdu-1022-栈
    [BZOJ3172]:[Tjoi2013]单词(AC自动机)
    [BZOJ4327]:[JZOI2012]玄武密码(AC自动机)
    [HDU5360]:Gorgeous Sequence(小清新线段树)
    [BZOJ3307]:雨天的尾巴(LCA+树上差分+权值线段树)
  • 原文地址:https://www.cnblogs.com/syq816/p/12333555.html
Copyright © 2020-2023  润新知