1 条题解

  • 0
    @ 2025-9-22 21:27:28

    由于需要考虑运算符优先级,我们需要使用栈来模拟表达式的计算过程:

    处理乘法优先:遇到乘法时立即计算

    延迟加减法:遇到加减法时先压入栈,最后统一计算

    对于表达式 $a \enspace op1 \enspace b \enspace op2 \enspace c \enspace op3 \enspace d$:

    1. 初始化栈,将第一个数字压入栈

    2. 依次处理每个运算符和数字:

    • 如果是乘法:弹出栈顶元素,与当前数字相乘,结果压回栈

    • 如果是加法:将当前数字压入栈(正数)

    • 如果是减法:将当前数字的负数压入栈

    3.最后将栈中所有元素相加得到最终结果

    #include <bits/stdc++.h>
    using namespace std;
    const vector<char> OPS = {'+', '-', '*'};
    void solve()
    {
        vector<int> nums(4);
        for (auto &v : nums)
            cin >> v;
        for (auto op1 : OPS)
            for (auto op2 : OPS)
                for (auto op3 : OPS)
                {
                    vector<char> ops = {op1, op2, op3};
                    vector<int> stk;
                    stk.push_back(nums.front());
                    for (int i = 0; i < 3; i++)
                    {
                        if (ops[i] == '*')
                        {
                            int u = stk.back();
                            stk.pop_back();
                            stk.push_back(u * nums[i + 1]);
                        }
                        else if (ops[i] == '+')
                            stk.push_back(nums[i + 1]);
                        else
                            stk.push_back(-nums[i + 1]);
                    }
                    int ans = 0;
                    for (auto it : stk)
                        ans += it;
                    if (ans == 24)
                    {
                        cout << nums[0] << op1 << nums[1] << op2 << nums[2] << op3 << nums[3] << endl;
                        return;
                    }
                }
        cout << -1 << endl;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0), cout.tie(0);
        int t;
        cin >> t;
        while (t--)
            solve();
        return 0;
    }
    
    • 1

    信息

    ID
    2726
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者