Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาด้านที่เหลือของสามเหลี่ยมมุมฉากด้วย C++


ภาพรวมปัญหา

ได้รับจำนวนเต็ม 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)