Разбор
В задаче следует решить квадратное уравнение по формуле
где — дискриминант квадратного уравнения, равный .
В зависимости от знака дискриминанта возможны три случая:
, уравнение не имеет корней;
, уравнение имеет один корень;
: уравнение имеет два корня, которые следует вывести в порядке возрастания;
Реализация алгоритма
Поскольку коэффициенты уравнения и его корни (в случае их наличия) целочисленные, то все вычисления будем проводить в целых числах. Читаем входные данные.
scanf("%d %d %d", &a, &b, &c);
Вычисляем дискриминант квадратного уравнения.
d = b * b - 4 * a * c;
В зависимости от знака дискриминанта выводим ответ.
if (d < 0) printf("No roots\n"); else if (d == 0) { x1 = -b / (2 * a); printf("One root: %d\n", x1); } else { x1 = (-b - sqrt(1.0*d)) / (2 * a); x2 = (-b + sqrt(1.0*d)) / (2 * a); printf("Two roots: "); if (x1 < x2) printf("%d %d\n", x1, x2); else printf("%d %d\n", x2, x1); }
Java реализация
import java.util.*; public class Main { public static void main(String []args) { Scanner con = new Scanner(System.in); int a = con.nextInt(); int b = con.nextInt(); int c = con.nextInt(); int d = b * b - 4 * a * c; double x1 = (-b - Math.sqrt(1.0 * d)) / (2 * a); double x2 = (-b + Math.sqrt(1.0 * d)) / (2 * a); if (d == 0) System.out.printf("One root: %.0f\n", x1); else if (d < 0) System.out.printf("No roots\n"); else if (x1 < x2) System.out.printf("Two roots: %.0f %.0f\n", x1, x2); else System.out.printf("Two roots: %.0f %.0f\n ", x2, x1); con.close(); } }