Слава и Артем играют в игру. Слава загадывает три числа и хочет чтобы Артем их угадал, при это Слава дает подсказку, называет сумму и произведение этих трех чисел. Напишите программу, которая поможет Артему угадать числа Славы.
Входные данные
Вводится два целых числа сумма и произведение - каждое на отдельной строке. Оба числа не превышают 100.
Выходные данные
Выводится три числа которые загадал Слава от меньшего к большему или строка «Таких чисел не существует».
Python
Python, помогите, пожалуйста
Совершенно необязательно перебирать 1 млн чисел (100 × 100 × 100 будет именно столько).
Если рассматривать только положительные значения, то достаточно двух вложенных циклов:
1) Первое число (a) - от 1 до [s/3] или ∛p, смотря, что меньше.
2) Второе число (b) - от a до [(s - a)/2] или √(p/a), смотря, что меньше.
где s - заданная сумма чисел, p - их произведение.
А третье число всегда равняется s - a - b, и для его нахождения никакие циклы вовсе не нужны. Таким образом, для суммы 100 мы переберём не более 50 вариантов, а для меньших сумм - ещё меньшее количество.
Функциональный вариант поиска по описанному алгоритму выглядит примерно так:
Если рассматривать только положительные значения, то достаточно двух вложенных циклов:
1) Первое число (a) - от 1 до [s/3] или ∛p, смотря, что меньше.
2) Второе число (b) - от a до [(s - a)/2] или √(p/a), смотря, что меньше.
где s - заданная сумма чисел, p - их произведение.
А третье число всегда равняется s - a - b, и для его нахождения никакие циклы вовсе не нужны. Таким образом, для суммы 100 мы переберём не более 50 вариантов, а для меньших сумм - ещё меньшее количество.
Функциональный вариант поиска по описанному алгоритму выглядит примерно так:
from itertools import takewhile
def gettriad(s, p):
return ((None, (0, 0, 0))[p == 0] if s == 0
else (0, 0, s) if p == 0
else next(
((a, b, s - a - b)
for a in takewhile(lambda x: x * x * x
a = int(input())
b = int(input())
x = False
for c in range(101):
if x == True:
break
for d in range(101):
for f in range(101):
if c+d+f == a and c*d*f == b:
print(c, d, f)
x = True
break
if x == False:
print("Не-а")
Володя Васильев
Чтобы отсортировать можно написать print(*sorted([c, d, f])) (в зависимости от того, в каком ты классе), либо каким нибудь for с if
Похожие вопросы
- Python.Помогите пожалуйста!!! Очень тяжёлая задача!
- Задача 10. Игра «Компьютер угадывает число» язык кода Python помогите пожалуйста
- Python. Помогите пожалуйста с кодом
- Python помогите пожалуйста
- Задача на python Помогите пожалуйста
- Python, помогите пожалуйста
- Помогите, пожалуйста, решить задачу Python
- Помогите пожалуйста, я начинающий программист и я столкнулся с проблемой. Как сделать локализацию Minecraft Python API?
- Есть люди отлично знающие python? Помогите распарсить txt файлик.
- Помогите пожалуйста с задачей по python!