Аналіз алгоритму
Необхідно розв'язати квадратне рівняння за формулою
де – дискримінант квадратного рівняння, рівний .
Залежно від знаку дискримінанта розглядаємо три випадки:
: коренів немає;
: один корінь;
: два корені.
У випадку двох коренів їх слід вивести в порядку зростання.
Реалізація алгоритму
Оскільки коефіцієнти рівняння цілочисельні та корені (у випадку їх наявності) також, то проводимо обчислення в цілих числах. Читаємо вхідні дані.
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(); } }