1 条题解
-
0
题意分析
我们需要解一元一次方程,其中:
- 方程形式为:左侧表达式右侧表达式
- 每个表达式由多个项组成,项可以是:
- 常数项(如)
- 变量项(如或)
- 运算符只有和(没有一元运算符)
- 需要处理三种情况:
- 唯一解(输出)
- 无解()
- 无穷多解()
解题思路
-
解析方程:
- 将方程按分割为左右两部分
- 分别解析左右表达式,计算:
- 的系数和(和)
- 常数项和(和)
-
合并同类项:
- 总系数:
- 总常数:
-
判断解的情况:
- 如果:
- →
- 否则 →
- 否则 → 解为
- 如果:
实现步骤
-
输入处理:
- 读取测试用例数
- 循环处理每个方程
-
表达式解析:
- 按分割方程
- 对每部分表达式:
- 初始化符号(默认为)
- 逐个字符解析:
- 遇到更新符号
- 提取数字(可能没有)和变量
- 计算系数和常数
-
求解判断:
- 计算和
- 根据上述逻辑输出结果
-
输出处理:
- 注意三种情况的输出格式
- 解需要向下取整
代码实现
#include <iostream> #include <cmath> using namespace std; int main() { int t; string s; cin >> t; while(t--) { cin >> s; int num = 1, sign = 1; int a = 0, b = 0; int flag = 0; // 方程左右标识,0指左边,1指右边 for(int i = 0; s[i]; i++) { if(s[i] == '=') { sign = 1, num = 1; flag = 1; } else if(s[i] == '+') { sign = 1, num = 1; } else if(s[i] == '-') { sign = -1, num = 1; } else { num = (s[i] == 'x') ? 1 : 0; while(isdigit(s[i])) { num = num * 10 + s[i] - '0'; i++; } if(s[i] == 'x') { if(flag == 0) b += num * sign; else b -= num * sign; } else { i--; if(flag == 0) a -= num * sign; else a += num * sign; } } } if(b == 0) { if(a == 0) cout << "IDENTITY" << endl; else cout << "IMPOSSIBLE" << endl; } else { int x = (int)floor((double)a / b); cout << x << endl; } } }
- 1
信息
- ID
- 1296
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者