解題 - 驗證三角形


題目 : 給三個邊長組成的三角形,判斷是不等邊、等邊,還是等腰三角形

提示

有效三角形的組成條件:

  1. 兩邊和大於第三邊
  2. 兩邊差小於第三邊

判斷

等邊三角形 : 三邊等長
等腰三角形 : 只有兩邊等長
不等邊三角形 : 三邊都不等長

期望結果

一開始宣告 3 個邊長的變數

let a = Number(prompt('請輸入第一條三角形邊長 (a)'))
let b = Number(prompt('請輸入第二條三角形邊長 (b)'))
let c = Number(prompt('請輸入第三條三角形邊長 (c)'))

有效三角形的組成條件:

  1. 兩邊和大於第三邊
    (a + b) > c , (b + c) > a , (a + c) > b

  2. 兩邊差小於第三邊
    (a - b) < c , (b - c) < a , (a - c) < b
    (b - a) < c , (c - b) < a , (c - a) < b

  3. 三邊長都必須大於零
    a > 0 , b > 0 , c > 0

等邊三角形
a === b && b === c

等腰三角形
(a === b && b !== c) || (b === c && c !== a) || (c === a && a !== b))

一開始寫程式

if (!((a + b) > c) || !((b + c) > a) || !((c + a) > b) || !((a - b) < c) || !((b - a) < c) || !((b - c) < a) || !((c - b) < a) || !((c - a) < b) || !((a - c) < b) || !(a > 0) || !(b > 0) || !(c > 0))

這段程式碼只要成立其中一個條件,就是 true,結果是 'invalid' ,是無效三角形,但助教說這樣不好閱讀,要我試著把否定的判斷改為正向的,並將同種類型的判斷項目放在同一行

所以我改成

if ((a + b) <= c || (b + c) <= a || (c + a) <= b ||
(a - b) >= c || (b - a) >= c || (b - c) >= a || (c - b) >= a || (c - a) >= b || (a - c) >= b ||
a <= 0 || b <= 0 || c <= 0)

!((a + b) > c) 改成 (a + b) <= c , !() 否定改為正向,就代表要寫出無效三角形的判斷式 , 而 2 、 2 、 4 是無效三角形 , 帶入 (a + b) <= c , (2 + 2) <= 4 , 確實成立

!((a - b) < c) 改成 (a - b) >= c , 4 、 2 、 2 是無效三角形 , 帶入 (a - b) >= c , (4 - 2) >= 2 , 確實成立

a > 0 改成 a <= 0 , 只要邊長是 0 或 小於 0 , 也是無效三角形

改後程式碼

#解題方法






你可能感興趣的文章

DE2_115(DAY3)以niosii去控制板子上的sdram

DE2_115(DAY3)以niosii去控制板子上的sdram

【單元測試的藝術】Chap 9: 在組織中導入單元測試

【單元測試的藝術】Chap 9: 在組織中導入單元測試

[DAY4] 初學Command Line

[DAY4] 初學Command Line






留言討論