สมมติว่าเรามีด้านตรงข้ามมุมฉากและพื้นที่ของสามเหลี่ยมมุมฉาก, เราต้องหาฐานและความสูงของสามเหลี่ยมนี้ ถ้าเป็นไปไม่ได้ให้คืนค่าเป็นเท็จ
ดังนั้น หากอินพุตเป็นเหมือน hypo =10, พื้นที่ =24 เอาต์พุตจะเป็น (6, 8)
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- hypo_sq :=hypo * hypo
- s :=รากที่สองของ (hypo_sq / 2.0)
- maxArea :=คำนวณพื้นที่ของสามเหลี่ยมโดยใช้ฐาน s และ hypotenuse hypo
- ถ้าพื้นที่> maxArea แล้ว
- คืนค่าเท็จ
- ซ้าย :=0.0 ขวา :=s
- ในขณะที่ |ขวา - ซ้าย|> 0.000001 ทำ
- ฐาน :=(ซ้าย + ขวา) / 2.0
- ถ้าพื้นที่ของสามเหลี่ยมโดยใช้ฐาน s และด้านตรงข้ามมุมฉาก hypo>=พื้นที่แล้ว
- ขวา :=ฐาน
- มิฉะนั้น
- ซ้าย :=ฐาน
- ความสูง :=รากที่สองของ (hypo_sq - ฐาน*ฐาน) และปัดเศษของจำนวนเต็มที่ใกล้เคียงที่สุด
- ปัดเศษของจำนวนเต็มฐานที่ใกล้ที่สุด
- คืนฐานและความสูง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
โค้ดตัวอย่าง
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)