1 条题解
-
0
练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