解題 - 找出所有等腰三角形


題目 : 找出三邊之和 <= 20 的所有等腰三角形, 但不包含正三角形

提示

  1. 像 2、2、1 和 1、2、2 的組合不重覆算到
  2. 三角會有一個底邊和兩個等邊,需要設計兩層迴圈來分工合作
  3. 任兩邊之和 > 第三邊
    任兩邊之差 < 第三邊

預期結果

等腰三角形的特性,兩邊等長,一邊不等長,先設變數
因為上圖三邊長,最小的兩個側邊是 2,最小底邊是 1

let a = 2 // 兩個側邊
let b = 1 // 底邊
let sumSide = 20 // 三邊最大總和
let count = 0 // 組數

寫出等腰三角形的條件,且三邊之和 <= 20

  1. 任兩邊之和 > 第三邊,任兩邊之差 < 第三邊

    a*2 > b || (b - a) < a // 因為 (b + a) 一定大於 a,所以省略不寫, 而 (a - b) 也一定小於 a,也省略不寫

  2. 三邊之和 <= 20

    (a*2 + b) <= 20

  3. 等腰三角形的特性,兩邊等長,一邊不等長

    a !== b

用兩個 for 迴圈找出所有等腰三角形

let maxSide = 9    //最大側邊值
let maxBase = 9    //最大底邊值
let sumSide = 20 
let count = 0

for (let a = 2; a <= maxSide; a++) {  

  for (let b = 1; b <= maxBase; b++) { 

    if (((a*2 + b) <= sumSide) && (a*2 > b || (b - a) < a) && (a !== b)) {
      count++
      console.log(`發現等邊三角形 | 三邊長分別為: ${a}、${a}、${b}`)
    }

  }
}

console.log(`共找到 ${count} 組等腰三角形`)

觀察到預期結果兩個側邊和底邊都 <= 9,所以我設定
最大側邊值 maxSide <= 9,和最大底邊值 maxBase <= 9

結果

結果是對的,但題目並沒有設 最大側邊值 和 最大底邊值,所以要把這兩個值拿掉,之後修改成

let sumSide = 20 //把 let 最大側邊值 和 let 最大底邊值 刪掉
let count = 0

for (let a = 2; a <= sumSide; a++) {  //用 sumSide 當最大值

  for (let b = 1; b <= sumSide; b++) { //用 sumSide 當最大值

    if (((a*2 + b) <= sumSide) && (a*2 > b || (b - a) < a) && (a !== b)) {
      count++
      console.log(`發現等邊三角形 | 三邊長分別為: ${a}、${a}、${b}`)
    }

  }
}

console.log(`共找到 ${count} 組等腰三角形`)

輸出結果

因為在
if (((a2 + b) <= sumSide) && (a2 > b || (b - a) < a) && (a !== b)) 裡
已經設置 (a*2 + b) <= sumSide,所以直接把 for迴圈裡 a 和 b 的條件改成

for (let a = 2; a <= sumSide; a++) {
for (let b = 1; b <= sumSide; b++) {
}}

#解題方法






你可能感興趣的文章

C++筆記 撲克牌問題

C++筆記 撲克牌問題

[BE201] 後端中階:middleware (上)

[BE201] 後端中階:middleware (上)

[ 筆記 ] JavaScript 進階 09 - What is 「this」?

[ 筆記 ] JavaScript 進階 09 - What is 「this」?






留言討論