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
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Павел
Павел
20.06.2024 21:05

a = float(input())
b = float(input())
c = float(input())

if a == b == c == 0:
print(‘Infinite solutions’)
elif a == 0 and b != 0 and c != 0:
print(f'{-(c / b):.2f}’)
elif a == b == 0:
print(‘No solution’)
elif a == c == 0:
print(‘0′)
else:
disc = (b ** 2) – (4 * a * c)
if disc == 0:
print(f'{(-b) / (2 * a):.2f}’)
elif disc > 0:
x1 = (-b – (disc ** 0.5)) / (2 * a)
x2 = (-b + (disc ** 0.5)) / (2 * a)
print(f'{min(x1, x2):.2f} {max(x1, x2):.2f}’)
else:
print(‘No solution’)

Барабулька
Барабулька
Ответить на  Павел
29.10.2024 23:12

Извольте, данный код не соответствует стандарту PEP8!
Дабы поспособствовать вам избежать трудностей, прикрепляю корректный код:

a = float(input())
b = float(input())
c = float(input())

def f(a, b, c):
    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’

print(f(a, b, c))

lexa45ru
lexa45ru
Ответить на  Барабулька
04.11.2024 21:17

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