1 条题解

  • 0
    @ 2007-11-7 14:48:03

    练72.4  口算练习题

    解题思路

    保存上一次运算类型。每行首个词若为a/b/c,就更新类型并读两个数,否则首词是操作数、沿用类型。构造完整表达式字符串并输出其长度。

    正确性说明

    依照上述推导,逐步维护已处理部分的有效状态。每一步都完成当前项的贡献且不改变已确定的次序,结束时输出的状态恰好对应题目要求。

    易错点

    负结果的负号也计长度;第一行输入n不是操作数。

    复杂度

    总表达式长度S,时间O(S),额外空间O(单式长度)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int n;
        cin >> n;
        char op = 'a';
        while (n--) {
            string s;
            cin >> s;
            long long x, y;
            if (s == "a" || s == "b" || s == "c") {
                op = s[0];
                cin >> x >> y;
            } else {
                x = stoll(s);
                cin >> y;
            }
            char mark = op == 'a' ? '+' : op == 'b' ? '-' : '*';
            long long result = op == 'a' ? x + y : op == 'b' ? x - y : x * y;
            string expr = to_string(x) + mark + to_string(y) + "=" + to_string(result);
            cout << expr << "\n" << expr.size() << "\n";
        }
        return 0;
    }
    
    • 1

    信息

    ID
    476
    时间
    1000ms
    内存
    64MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者