ภาพรวมปัญหา
ได้รับจำนวนเต็ม a แทนด้านหนึ่งของสามเหลี่ยมมุมฉาก ต้องตรวจสอบว่าสามารถสร้างสามเหลี่ยมมุมฉากได้หรือไม่ และหาด้านอีกสองด้าน
ตัวอย่าง
อินพุต
a = 5
เอาต์พุต
Sides : 5, 12, 13
คำอธิบาย
5² + 12² = 13² (25 + 144 = 169)
วิธีแก้ปัญหา
ใช้ทฤษฎีบทพีทาโกรัส: a² + b² = c² โดยที่ a, b คือด้านประกอบมุมฉาก และ c คือด้านตรงข้ามมุมฉาก
สูตรหาด้านอื่นๆ จากด้าน a ที่กำหนด:
กรณีที่ 1: a เป็นเลขคู่
b = (a²/4) - 1 c = (a²/4) + 1
กรณีที่ 2: a เป็นเลขคี่
b = (a² - 1) / 2 c = (a² + 1) / 2
กรณีพิเศษ: a = 1 หรือ a = 2 ไม่สามารถสร้างสามเหลี่ยมมุมฉากได้ (คืนค่า -1)
โค้ดตัวอย่าง
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
#define PI 3.1415926535
void printOtherSides(int n) {
int b, c;
if (n & 1) { // เลขคี่
if (n == 1)
cout << -1 << endl;
else {
b = (n*n - 1) / 2;
c = (n*n + 1) / 2;
}
} else { // เลขคู่
if (n == 2)
cout << -1 << endl;
else {
b = n*n/4 - 1;
c = n*n/4 + 1;
}
}
cout << "Sides : a = " << n << ", b = " << b << ", c = " << c << endl;
}
int main() {
int a = 5;
printOtherSides(a);
return 0;
}
เอาต์พุต
Sides : a = 5, b = 12, c = 13
สรุป
สูตรนี้มาจากการสร้าง Pythagorean Triples โดยใช้คุณสมบัติของจำนวนเต็ม สามารถหาด้านที่เหลือได้ใน O(1)