Решить задачу на python через дискриминант
Даны переменные a, b, user_input. Пользователь вводит например число 1950. Мы должны вывести сообщение после всех вычислении вместо a и b числа. Пример:
Input:
(10 * a + b) * a * b = 1950
Output:
(10 * 6 + 5) * 6 * 5 = 1950
Я не понимаю как мне найти числа a и b и как мы получили 6 и 5. Вроде как мы можем использовать дискриминант для решения этой задачи.
Ответы (2 шт):
Автор решения: u111
→ Ссылка
def solve(res):
abs_ = res if res >= 0 else -res
sqrt_ = int(abs_ ** 0.5) + 1
# Перебираем возможные варианты чисел a и b
for a in range(-sqrt_, sqrt_):
if a == 0 or res % a:
continue
for b in range(-sqrt_, sqrt_):
num = (10 * a + b) * a * b
if num == res:
return (a, b)
# Если целых решений нет, ищем дробные
if res > 0:
a_b = (res / 11) ** (1 / 3)
elif res < 0:
a_b = -(-res / 11) ** (1 / 3)
else:
a_b = 0
return (a_b, a_b)
res = int(input())
a, b = solve(res)
print(f"(10 * {a} + {b}) * {a} * {b} = {res}")
Автор решения: Павел
→ Ссылка
# !!!недостаточно условий в вашей задаче!!! #
#############################################
# импорт функции поиска квадратного корня
from math import sqrt
# в этой функции приводим ответ в удобоваримый вид для печати
# и ставим допуск по количеству знаков после запятой
def trans_val(value):
str_a = str(value).split('.')[1] if '.' in str(value) else ''
if len(str_a) <= 1: # проверяем если после запятой 1 знак
if str_a == '0': # если 0, то отбрасываем знаки после запятой
value = int(value)
if value < 0: value = str(f'({value})') # если отрицательно - заключаем в скобки
return value
elif 1 <= len(str_a) <= 2: # проверяем 1 знак значением не 0 и ставим ограничение длины 2 знакa
if value < 0: value = str(f'({value})') # если отрицательно - заключаем в скобки
return value
else:
return False
# ВОТ ТУТ ВАШ INPUT
user_input = int(input("Введите целое число: "))
start = user_input
stop = user_input + 1
if user_input == 0: # если ввести 0, будет перебор значений от 1 до 2000
start = 1
stop = 2001
for user_input in range(start, stop):
for b in range (1, 2001): # перебираем нужный диапазон чисел (от 1 до 2000)
# приводим уравнение к виду Ax²+Bx+C=0, где x=а
A = 10 * b
B = b**2
C = -user_input
D = B**2 - 4*A*C # находим дискрименант
if b<0: b = str(f'({b})') # если b отрицательно - заключаем в скобки
if D >= 0 and A != 0: # проверяем, как в школе
# находим первый корень
a = (-B + sqrt(D))/(2*A)
a = trans_val(a)
if a: print(f'(10 * {a} + {b}) * {a} * {b} = {user_input}')
# находим второй корень
a = (-B - sqrt(D)) / (2*A)
a = trans_val(a)
if a: print(f'(10 * {a} + {b}) * {a} * {b} = {user_input}')