Top.Mail.Ru
Ответы

Программа на C++ / Python

Тимофею на день рождения родители подарили металлоискатель. Естественно, наутро мальчик отправился на поиски клада. Он предположил, что когда-то давно кто-то мог обронить золотую монету на древней прямой дороге и для облегчения поиска придумал систему координат. Ось абсцисс OX направлена вдоль дороги, а ось ординат OY направлена вверх.

Устройство работает следующим образом: на его индикаторе выставляется натуральное число r и если ровно на этом расстоянии имеется золотой предмет, то загорается зелёная лампочка.
Сначала юный кладоискатель выставил число r1 в точке x = 0, затем отошёл в точку с абсциссой x = a и выставил число r2, как показано на рисунке. Новичкам везёт, оба раза загорелась зелёная лампочка. Определите координаты потерянной когда-то давно золотой монетки.



Формат входных данных

Программа получает на вход три целых числа a, r1 и r2, записанных в отдельных строках (1 ≤ a; r1; r2 ≤ 109).



Формат выходных данных
Выведите в двух строках два числа – координаты сокровища (сначала – абсциссу, потом – ординату). Значение ординаты должно быть не положительным (монетка не может висеть в воздухе). Гарантируется, что входные данные таковы, что ответ существует и обе координаты монеты будут целыми числами.





По дате
По Рейтингу
Аватар пользователя
Новичок

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

12345
 from math import prod, isqrt
a, r1, _ = sides = tuple(map(int, map(input, ('',) * 3)))
p = sum(sides)
sq = prod(map(int.__sub__, (p,) * 4, map((2).__mul__, (0,) + sides))) // (4 * a * a)
print(isqrt(r1 * r1 - sq), -isqrt(sq), sep = '\n') 

Математическое обоснование с рисунком можешь тут посмотреть:
https://otvet.mail.ru/question/233628737
Хотя, рисунок-то у тебя как раз - свой. :-)

Аватар пользователя
Мастер

Для решения задачи можно воспользоваться геометрическим подходом и нарисовать на координатной плоскости точки (0, 0), (a, r1) и (a, r2), соединив их отрезками.

Так как мы знаем расстояние до монеты (r) и ее координаты (x, y), то можем записать два уравнения окружности:

(x - 0)^2 + y^2 = r1^2 (1)
(x - a)^2 + (y - r2)^2 = r2^2 (2)

Решив их относительно x и y, можно найти координаты потерянной монеты.

Решение:

Из уравнений (1) и (2) можно выразить x:

x = (r1^2 - y^2)^(1/2) (3)
x = a + (r2^2 - (y - r2)^2)^(1/2) (4)

Приравняв выражения (3) и (4), получим:

(r1^2 - y^2)^(1/2) = a + (r2^2 - (y - r2)^2)^(1/2)

Возводим обе части уравнения в квадрат и переносим все слагаемые с y в одну сторону:

r1^2 - y^2 = a^2 + r2^2 - 2ar2 + y^2 - 2yr2 + y^2

Упрощаем:

2y^2 - 2yr2 = a^2 + r1^2 - r2^2 - 2ar2

y^2 - yr2 = (a^2 + r1^2 - r2^2 - 2ar2)/2

y(y - r2) = (a^2 + r1^2 - r2^2 - 2ar2)/2

y = ((a^2 + r1^2 - r2^2 - 2ar2)/2) / (r1 - r2)

Подставляем найденное значение y в уравнение (3) или (4) и находим x:

x = (r1^2 - y^2)^(1/2)

Ответом будут координаты (x, y).

Реализация на Python:

```python
a = int(input())
r1 = int(input())
r2 = int(input())

y = ((a**2 + r1**2 - r2**2 - 2*a*r2) / 2) / (r1 - r2)
x = (r1**2 - y**2)**0.5

print(x, y)
print(x, -y)
```

Первая строка вывода соответствует координатам с положительной ординатой, а вторая строка - с отрицательной.