ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลขที่ระบุเส้นรอบรูปของสามเหลี่ยม ฟังก์ชันควรคืนค่าอาร์เรย์ของชุดด้านสามเหลี่ยมทั้งหมดที่มีเส้นรอบรูปเท่ากับค่าที่กำหนด
ตัวอย่าง
โค้ดตัวอย่างด้านล่าง:
const perimeter = 120;
const findAllRight = (perimeter = 1) => {
const res = [];
for (let a = 1; a <= perimeter; a++) {
for (let b = a; b <= perimeter - a; b++) {
for (let c = a; c <= a + b; c++) {
if (a + b + c !== perimeter) {
continue;
}
if ((a * 2) + (b * 2) === (c * 2)) {
res.push([a, b, c]);
}
}
}
}
return res;
};
console.log(findAllRight(perimeter));
ผลลัพธ์
[ [ 1, 59, 60 ], [ 2, 58, 60 ], [ 3, 57, 60 ], [ 4, 56, 60 ], [ 5, 55, 60 ], [ 6, 54, 60 ], [ 7, 53, 60 ], [ 8, 52, 60 ], [ 9, 51, 60 ], [ 10, 50, 60 ], [ 11, 49, 60 ], [ 12, 48, 60 ], [ 13, 47, 60 ], [ 14, 46, 60 ], [ 15, 45, 60 ], [ 16, 44, 60 ], [ 17, 43, 60 ], [ 18, 42, 60 ], [ 19, 41, 60 ], [ 20, 40, 60 ], [ 21, 39, 60 ], [ 22, 38, 60 ], [ 23, 37, 60 ], [ 24, 36, 60 ], [ 25, 35, 60 ], [ 26, 34, 60 ], [ 27, 33, 60 ], [ 28, 32, 60 ], [ 29, 31, 60 ], [ 30, 30, 60 ] ]
คำอธิบายเพิ่มเติม
โค้ดมีบั๊กร้ายแรง: เงื่อนไข `(a * 2) + (b * 2) === (c * 2)` คือ `2a + 2b = 2c` → `a + b = c` ซึ่งเป็นเส้นตรง ไม่ใช่สามเหลี่ยมมุมฉาก! สูตรมุมฉากคือ `a² + b² = c²` (Pythagorean theorem) ผลลัพธ์ที่ได้จึงไม่ใช่สามเหลี่ยมมุมฉากจริง