给定一个形如 ax² + bx + c 的一元二次方程(仅提供 a、b 和 c 的值),我们需要求出它的根。如果该方程有实根,则按降序打印每个根的向下取整值;如果根是虚数,则打印 Imaginary。
示例:
> 输入: a = 1, b = -2, c = 1
> 输出: [ 1, 1]
> 解释: 对于 a = 1, b = -2, c = 1,判别式为 0,因此该一元二次方程有一个重复的实根:x =−b2 a=1 x = \frac{-b}{2a} = 1。
>
> 输入: a = 1, b = 7, c = 12
> 输出: [ -3, -4]
> 解释: 对于 a = 1, b = 7, c = 12,判别式为 49 – 48 = 1,因此根是实数且不相同的:即根为 -3 和 -4。
>
> 输入: a = 1, b = 1, c = 1
> 输出: Roots are Imaginary
> 解释: 对于输入 a = 1, b = 1, c = 1,判别式 D=b²−4ac=1−4(1)(1)=−3,为负数,因此根是虚数(无实根)。
我们可以使用下面的公式来找到根(这也被称为 Sridharacharya 公式):
x=\frac{-b\pm \sqrt{b^2-4ac}}{2a}
根的值取决于项 (b² – 4ac),这被称为 判别式 (D)。
> 如果 D > 0:
> => 这发生在 b² > 4ac 时。
> => 根是实数且不相等的。
> => 根为 {-b + \sqrt(b² – 4ac)}/2a 和 {-b – \sqrt(b² – 4ac)}/2a。
>
> 如果 D = 0:
> => 这发生在 b² = 4ac 时。
> => 根是实数且相等的。
> => 根为 (-b/2a)。
>
> 如果 D < 0:
> => 这发生在 b² < 4ac 时。
> => 根是虚数且不相等的。
> => 判别式可以写成 (-1 * -D)。
> => 由于 D 是负数,-D 将是正数。
> => 根为 {-b ± \sqrt(-1*-D)} / 2a = {-b ± i\sqrt(-D)} / 2a = {-b ± i\sqrt-(b² – 4ac)}/2a,其中 i = \sqrt-1。
让我们使用以下伪算法来找到方程的根:
伪算法:
> 开始
> 读取 a, b, c 的值
> 如果 a == 0
> 打印 "imaginary" // 不是一元二次方程
> 退出
> 计算 d = b² – 4ac // 判别式
> 如果 d > 0
> root1 = floor((-b + √d) / (2a))
> root2 = floor((-b – √d) / (2a))
> 按降序打印 root1 和 root2
> 否则 如果 d == 0
> root1 = root2 = floor(-b / (2a))
> 打印 root1 和 root2
> 否则
> 打印 "imaginary" // 复根
> 结束
下面是上述公式的具体实现。
C++
CODEBLOCK_096f6d48
C
CODEBLOCK_7de95949
Java
`
import java.util.*;
public class Main {
st