假设我们有一个直角三角形的斜边和面积,我们必须找到这个三角形的底和高。如果不可能,则返回 False。
因此,如果输入像 hypo = 10,area = 24,那么输出将是 (6, 8)。
为了解决这个问题,我们将按照以下步骤操作 -
hypo_sq := hypo * hypo
s := (hypo_sq / 2.0) 的平方根
maxArea := 使用底数和斜边hypo计算三角形的面积
如果 area > maxArea,则
返回错误
左:= 0.0,右:= s
而|右-左| > 0.000001,做
左 := 基础
右 := 基础
基数:=(左+右)/ 2.0
如果使用底数 s 和斜边 hypo >= 面积的三角形面积,则
否则,
height := (hypo_sq - base*base) 的平方根并四舍五入到最接近的整数
四舍五入到最接近的基数整数
返回基数和高度
让我们看看以下实现以获得更好的理解 -
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))
10, 24输出结果
(6, 8)