ในปัญหานี้ เราได้จำนวนเต็มที่แสดงถึงด้านหนึ่งของสามเหลี่ยมมุมฉาก เราต้องตรวจสอบว่าเป็นไปได้ไหมที่จะมีสามเหลี่ยมมุมฉากกับด้าน a หากเป็นไปได้ ให้หาอีกสองด้านที่เหลือและมุมของสามเหลี่ยมมุมฉาก
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
a = 5
ผลลัพธ์
Sides : 5, 12, 13 Angles : 67.38, 22.62, 90
คำอธิบาย
ด้านของมุมฉากหาได้เป็น 5 2 + 12 2 =13 2 และเมื่อใช้ด้านเหล่านี้ เราจะพบว่ามุมคือ Sin -1 (5/13) และ 90 - บาป -1 (5/13).
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการใช้ทฤษฎีบทปีทาโกรัส เรารู้ว่าด้านของสามเหลี่ยมมุมฉากเป็นไปตามทฤษฎีบทปีทาโกรัส ซึ่งก็คือ
a2 + b2 = c2
โดยที่ a และ b เป็นด้านของสามเหลี่ยม และ c คือด้านตรงข้ามมุมฉากของสามเหลี่ยม
เมื่อใช้สิ่งนี้ เราจะคำนวณค่าของ b และ c โดยใช้ a
กรณีที่ 1 − ถ้า a เป็นคู่
c = (a2 + 4) + 1 b = (a2 + 4) - 1
กรณีที่ 2 − หาก a เป็นคี่
c = (a2 + 1)/ 2 c = (a2 - 1)/ 2
ในการหามุม เราต้องหาด้านของสามเหลี่ยมและใช้ค่าเหล่านี้เพื่อค้นหาค่า cos
cos(A) = b2 + c2 - a2 / 2bc cos(B) = a2 + c2 - b2 / 2ac cos(C) = a2 + b2 - c2 / 2ab
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
#define PI 3.1415926535
void printAngles(int a, int b, int c) {
double x = (double)a;
double y = (double)b;
double z = (double)c;
double A = (((double)(acos(( (y*y) + (z*z) - (x*x) ) / (2*y*z))))* 180 / PI);
double B = ((double)(acos(( (x*x) + (z*z) - (y*y) ) / (2*x*z)))* 180 / PI);
cout<<"Angles: A = "<<A<<", B = "<<B<<", C = 90";
}
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;
printAngles(n,b,c);
}
int main() {
int a = 5;
printOtherSides(a);
return 0;
} ผลลัพธ์
Sides : a = 5, b = 12, c = 13 Angles: A = 22.6199, B = 67.3801, C = 90