Cho huyền (hypotenuse) và diện tích của tam giác vuông. Tìm đáy và chiều cao. Nếu không thể trả về False.
Ví dụ: hypo = 10, area = 24 → (6, 8).
Giải thuật
- Tính
hypo_sq = hypo^2. - Tìm đáy tối đa
s = sqrt(hypo_sq/2)(khi tam giác cân). - Diện tích tối đa tại đáy
s. Nếu diện tích yêu cầu > max →False. - Dùng tìm kiếm nhị phân trên đoạn
[0, s]để tìm đáy sao cho diện tích bằng yêu cầu. - Tính chiều cao từ định lý Pythagoras, làm tròn.
Mã ví dụ
from math import sqrt
def calculate_area(b, h):
hei = sqrt(h*h - b*b)
return 0.5 * b * hei
def solve(hypo, area):
hypo_sq = hypo * hypo
s = sqrt(hypo_sq / 2.0)
maxArea = calculate_area(s, hypo)
if area > maxArea:
return False
left = 0.0
right = s
while abs(right - left) > 0.000001:
base = (left + right) / 2.0
if calculate_area(base, hypo) >= area:
right = base
else:
left = base
height = round(sqrt(hypo_sq - base*base))
base = round(base)
return base, height
hypo = 10
area = 24
print(solve(hypo, area))
Đầu vào
10, 24
Đầu ra
(6, 8)