CCF CSP 201903-2 二十四點


#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提出了這樣的思路:

先算乘除,把表達式變成只有加減,然后計算加減即可。

(這體現了一種“減而治之”的思想——把大問題化簡成小問題,把困難問題化簡成簡單問題)

具體思路見鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM