💡說明
- 題目沒給單位,看是要公分公尺公里隨便你(如果是公里那應該是納斯卡線等級的三角形,老高會來講一下有沒有外星人),反正只要是整數就好,若不是整數會有無限多個解。
- 不要重複計算,例如1–2–2跟2–2–1是同一種三角形,只算一組。
- 組成三角形的有效條件是:兩邊和大於第三邊、兩邊差小於第三邊,所以要記得排除無效的邊長組合。
解題過程
因為剛學,無法像大神們一樣行雲流水直接把code寫爆,所以先寫虛擬碼(Pseudo Code)組織一下解題想法。當初看到這題有先愣了一下,想說,三小,怎麼好像有點難,還要排除無效的哦?我寫的code有這麼聰明嗎?但仔細想想後發現好像也沒那麼難。我是先用最智障最暴力的方式去想怎麼解,理出邏輯後思考如何優化,再將想法轉成code。
邏輯方向
那我就來一個個數數看吧,應該有什麼規律吧。所以我把等腰那兩個相等邊長從最小開始看,再依序搭配第三邊,一個個算下去,例如
1–1–1 => 正三角形,去除
1–1–2 => 無效,因為任兩邊和未大於第三邊,同理,也不會有1–1–3、1–1–4等
到這邊,兩邊長為1的等腰三角形都考慮完了,換2
2–2–1 => 符合
2–2–2 => 正三角形,去除
2–2–3 => 符合
2–2–4 => 無效,任兩邊和未大於第三邊,同理,也不會有2–2–5、2–2–6等
接下來就依照同樣邏輯繼續算下去
由於初學者也沒學過幾根毛,這題基本上就是考你迴圈(Loop),因此我應該要先用第一個loop把三角形雙邊長的數字從最小開始跑,然後再用第二個loop跑第三邊,同時在第二個loop底下寫個if幫我把關,把不符合題目要求的都剔除,只留下我要的。
虛擬碼(Pseudo Code)
有了以上初步想法後,來寫寫看虛擬碼 。
LET x 為等腰三角形相等之兩邊長 //註1
LET c 為第三邊
LET count 為找到幾組等腰三角形FOR x 從2開始到9,每次x就加1 //註2、3
FOR c 從1開始到9,每次c就加1
IF (2x > c) 且 (2x + c <= 20 ) 且 (x !== c) //註4
就印出 `發現等腰三角形!三邊長分別為:${x}、${x}、${c}`
count = count +1印出 `共找到 ${count} 組等腰三角形`
註1:先將兩邊長定義為x有兩個好處,第一是將a與b簡化成一個變數,第二是避免1–9–9和9–1–9這類重覆計算
註2:從2是因除了邊長為1的正三角,不會有兩邊長為1的等腰三角(若皆為整數),例如1–1–2則1+1沒大於2,不成立
註3:到9是因若雙邊長為10則三邊和就20了,不符合題目條件
註4:三角形有效的兩個條件都會導向(2x>c)的結論,可以自己算算看就知道,另外再加上「三邊和不大於20」以及「去除正三角形」的條件
🎉成果
最後,就來看看成果長怎樣。
code
跑出來的結果
大概是這樣,歡迎各路高手不吝給予超菜的菜蟲指導 👍