首页 > 其他 > 详细

CCF CSP 201903-2 二十四点

时间:2019-08-17 20:03:31      阅读:93      评论:0      收藏:0      [点我收藏+]
#include <bits/stdc++.h>
#include <queue>
#include <iostream>
using namespace  std;
int main() {
    int n;
    string s;
    cin >> n;
    queue<int> num;
    queue<char> op;
    while(n--) {
        cin >> s;
        s.push_back('+');
        for(int i = 1; i < s.size(); i+=2) {
            int t = s[i-1] - '0';
            for ( ;i < s.size() && s[i] == 'x' || s[i] == '/'; i += 2) {
                t = (s[i] == 'x') ? t * (s[i+1]-'0'): t / (s[i+1] - '0');
            }
            num.push(t);
            op.push(s[i]);
        }
        num.push(0);
        int ans = num.front();
        num.pop();
        while(!op.empty()) {
            char opration = op.front();
            op.pop();
            ans = (opration == '+') ? ans + num.front() : ans - num.front();
            num.pop();
        }
        cout << (ans == 24 ? "Yes" : "No" )<< endl;
        //cout << ans;
    }
    return 0;
}

这个题目最一般的思路可能是按照数据结构课所学的,用后缀表达式,但是

https://blog.csdn.net/richenyunqi/article/details/89188626提出了这样的思路

先算乘除,把表达式变成只有加减,然后计算加减即可。

(这体现了一种“减而治之”的思想——把大问题化简成小问题,把困难问题化简成简单问题)

具体思路见链接

CCF CSP 201903-2 二十四点

原文:https://www.cnblogs.com/huangming-zzz/p/11370052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!