string - 算法 - 求解一个变量的线性方程

标签 string algorithm equation-solving

<分区>

给定一个字符串形式的表达式,求解 x。表达式中 x 的最高次幂将等于 1。允许的运算符为 +、* 和 -。这些都是二元运算符。因此,2x 将写为 2*x。每个运算符后面都会跟一个单独的项或常数。

例如,考虑以下等式:

2*x+5-(4*x-7+(4-2))=10*x-9

这是一个完全有效的等式。 1*2*3 形式的表达式无效,但 1*(2*3) 有效。

给定这样一个方程,我们需要找到 x 的解。如果方程式无效,程序应显示一条错误消息。

有人可以提供有关如何解决此问题的任何想法吗?我现在唯一想到的是使用上下文无关文法进行词法分析和解析。但我觉得有比这更简单的解决方案。有人可以解释一下吗?

最佳答案

(1) 将e1 = e2转换为e = 0,其中e = e1 - e2

(2) 将e转换为ax + b,对于一些ab

(3) 求解,x = -b/a

步骤(2)可以递归处理,像这样:

F(k)     = 0x + k    // For any constant k.
F(x)     = 1x + 0
F(p + q) = let a_1x + b_1 = F(p)
           and a_2x + b_2 = F(q) 
           in  (a_1 + a_2)x + (b_1 + b_2)
    // Similarly for subtraction.
F(p * q) = let a_1x + b_1 = F(p)
           and a_2x + b_2 = F(q) // At least one of a_1 and a_2 must be zero.
           in  (a_1*b_2 + a_2*b_1)x + (b_1*b_2)

关于string - 算法 - 求解一个变量的线性方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13671783/

相关文章:

java - 更改长变量的格式?

c# - 使向导导航不那么线性的简单算法

algorithm - 如何找到图中最长的简单路径?

algorithm - MATLAB - 用于方程系统的 lsqnonlin

java - 求解带约束的多元方程 - Choco

c++ - 我什么时候应该使用 std::string/std::string_view 作为参数/返回类型

python - 使用嵌套分隔符号拆分 Python 字符串

c - c 编程中的字符串在输出末尾具有垃圾值

python - 控制无限递归的更好方法

c++ - C++中判断一个集合是否为代数群的几个问题