Q. Корень зла

Не все любят математику, а кто-то даже считает её настоящим злом во плоти, хотя от неё никуда не деться. К примеру, Python изначально разрабатывался только для решения математических задач, поэтому давайте используем его, чтобы найти корни уравнения.

Формат ввода

Вводится 3 вещественных числа abc — коэффициенты уравнения вида:
ax2+bx+c=0.

Формат вывода:

Если у уравнения нет решений — следует вывести «No solution».
Если корней конечное число — их нужно вывести через пробел в порядке возрастания с точностью до сотых.
Если корней неограниченное число — следует вывести «Infinite solutions».

Примечание

Обратите внимание, что ограничения на значения коэффициентов отсутствуют.

Пример

Ввод

1
-2
1

Вывод

1.00

Ввод

3.5
-2.4
-7.3

Вывод

-1.14 1.83

Решение

Главная проблема этой задачи состоит в том, что классическое квадратное уравнение предполагает, что a не может быть равно нулю. В нашем же условии написано, что значения коэффициентов могут быть любыми. Это значит, что большинство решений, доступных в виде готовых рецептов нам не подходит.

Условно задачу можно разбить на два блока – решения, когда не нужно вычислять дискриминант и решение, основанное на дискриминанте.

В первом блоке нам надо проверить следующие условия:
1) все три коэффициента равны нулю
2) a равно нулю, а b и c – нет
3) a и b равны нулю, значение c в этой ситуации роли не играет
4) a и c равно нулю, значение b в этой ситуации влияет на ответ.

Во втором:
1) дискриминант равен нулю
2) дискриминант больше нуля
3) дискриминант меньше нуля.

В общем случае, шаблон для решения задачи выглядит следующим образом:

Python
if a == b == c == 0:
    # your code here
    pass
elif a == 0 and b != 0 and c != 0:
    # your code here
    pass
elif a == b == 0:
    # your code here
    pass
elif a == c == 0:
    # your code here
    pass
else:
    disc = (b ** 2) - (4 * a * c)
    if disc == 0:
        # your code here
        pass
    elif disc > 0:
        # your code here
        pass
    else:
        # your code here
        pass
Посмотреть код

Решение

Python
    a, b, c = nums
    if a == b == c == 0:
        return 'Infinite solutions'
    elif a == 0 and b != 0 and c != 0:
        return f'{-(c / b):.2f}'
    elif a == b == 0:
        return 'No solution'
    elif a == c == 0:
        return 0
    else:
        disc = (b ** 2) - (4 * a * c)
        if disc == 0:
            return f'{(-b) / (2 * a):.2f}'
        elif disc > 0:
            x1 = (-b - (disc ** 0.5)) / (2 * a)
            x2 = (-b + (disc ** 0.5)) / (2 * a)
            return f'{min(x1, x2):.2f} {max(x1, x2):.2f}'
        else:
            return 'No solution'
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии