Не все любят математику, а кто-то даже считает её настоящим злом во плоти, хотя от неё никуда не деться. К примеру, Python изначально разрабатывался только для решения математических задач, поэтому давайте используем его, чтобы найти корни уравнения.
Формат ввода
Вводится 3 вещественных числа a, b, c — коэффициенты уравнения вида:
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) дискриминант меньше нуля.
В общем случае, шаблон для решения задачи выглядит следующим образом:
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
Посмотреть код
Решение
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'
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’)
Извольте, данный код не соответствует стандарту 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))
это потому, что при вставке кода не использовался виджет вставки кода.
К сожалению, веб игнорирует пробелы и без специальных ухищрений вроде   или виджетов код корректно вставить невозможно.
Ваш код, в данный момент, тоже не будет являться корректным, мы еще ничего не знаем про функции, поэтому использовать их в решении не можем, хотя уверен что “чекеру” все-равно, главное чтобы результат совпадал.