#P2252. Equation Solver

    ID: 1253 传统题 1000ms 256MiB 尝试: 3 已通过: 1 难度: 10 上传者: 标签>其他数学字符串线性代数模拟Ulm Local 1997

Equation Solver

题目描述

编写一个程序,用于求解一元线性方程

输入

输入包含多个方程,每个方程独占一行。所有方程均为长度小于100的字符串,并严格遵循以下语法(EBNF格式):

Equation   := 表达式 '=' 表达式  
Expression := 项 { ('+' | '-') 项 }  
Term       := 因子 { '*' 因子 }  
Factor     := 数字 | 'x' | '(' 表达式 ')'  
Number     := 数字 | 数字 数字  
Digit      := '0' | '1' | ... | '9'  

尽管该语法可能构造出非线性方程(例如 xx=25x*x=25),但我们保证输入文件中所有方程均为一元线性方程。同时,所有子表达式也保证是线性的。例如,不会出现类似 xxxx+x=0x*x-x*x+x=0 的测试用例,虽然该方程整体是线性的,但包含非线性子表达式(xxx*x)。

注意,输入中的所有数字均为非负整数,而方程的解 xx 可能为实数。

输出

对于每个测试用例,输出一行 "Equation#i""Equation \#i"(其中 ii 为测试用例编号),并根据以下情况输出结果:

  • 如果方程无解,输出 "Nosolution.""No solution."
  • 如果方程有无限多解,输出 "Infinitelymanysolutions.""Infinitely many solutions."
  • 如果方程有唯一解,输出 "x=""x = 解",其中解为对应的实数(保留六位小数)。

每个测试用例输出结束后,额外输出一个空行。

样例输入 1

x+x+x=10  
4*x+2=19  
3*x=3*x+1+2+3  
(42-6*7)*x=2*5-10  

样例输出 1

Equation #1  
x = 3.333333  

Equation #2  
x = 4.250000  

Equation #3  
No solution.  

Equation #4  
Infinitely many solutions.  

来源
Ulm Local 1997