判斷一個三角形是等邊三角形、等腰三角形,還是不等邊三角形。
_等邊_三角形三邊的長度都相同。
_等腰_三角形至少有兩邊的長度相同。 (有些定義會說恰好有兩邊長度相同,但在這個練習裡,我們採用「至少兩邊」的說法。)
_不等邊_三角形的三邊長度都不相同。
一個形狀要成為三角形,每一邊的長度都必須大於 0,而且任兩邊長度的和大於或等於第三邊的長度。
_退化三角形_是指兩邊長度的和等於第三邊長度的三角形,例如1, 1, 2。
我們選擇在這個練習中不加入退化三角形的測試。
你可以自行決定要不要處理這些情況,也可以放心忽略它們。
用方程式表示的話:
令a、b、c為三角形的三邊。
那麼,下列三個運算式都必須成立:
a + b ≥ c
b + c ≥ a
a + c ≥ b
參見三角不等式
這個練習的實作方式有很多種。以下是一些可能對你有幫助的主題,取決於你採用哪種做法。
或者,你也可能想出一個完全用不到這些的做法喔!
基礎練習測驗的是辨識三邊皆為整數的三角形。然而,有些三角形無法只用整數表示。一個簡單的例子是兩邊等長且長度為 1、夾角為 90 度的三角形。它的第三邊長度是 2 的平方根,也就是無理數(意思是它無法寫成整數或分數)。
為了同時處理整數與浮點數的情況而改寫分析用的函式,會相當繁瑣;若要涵蓋所有可能的整數與浮點數型別,更是格外麻煩:以位元寬度 8、16、32、64 和 128 的有號與無號變體來說,那等於要把本質上相同的程式碼重新實作 10 次,而且這還沒把浮點數算進去!
有個更好的做法:泛型。只要把你的 Triangle 改寫成Triangle<T>,就能只寫一次程式碼,並把所有那些特化的產生工作交給編譯器。請注意,為了使用數學運算,你需要用特徵把泛型型別限制在支援這些運算的型別上。
另外還有一些加分測試,可以測試你的實作在浮點數上的表現。如要啟用它們,請加上generic功能旗標來執行測試,像這樣:
cargo test --features generic