首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言經典題解:判斷直角三角形 (畢達哥拉斯定理 + 三角形不等式)

     編輯:關於C

題目:Egypt — 直角三角形判斷

輸入三邊長 a, b, c,判斷是否能構成直角三角形。輸入以 0 0 0 結束。

核心數學條件

  1. 三角形不等式 (必要條件):任意兩邊之和 > 第三邊
    a + b > c && a + c > b && b + c > a
  2. 畢達哥拉斯定理 (充要條件):
    a² + b² = c²  或  a² + c² = b²  或  b² + c² = a²
    (任一邊為斜邊皆可能)
  3. 正邊長:a > 0 && b > 0 && c > 0

完整解答

#include 

int main() {
    int a, b, c;
    // 讀取至 EOF 或 0 0 0
    while (scanf("%d %d %d", &a, &b, &c) == 3) {
        if (a == 0 && b == 0 && c == 0) break;

        // 1. 正邊長 + 三角形不等式
        if (a > 0 && b > 0 && c > 0 &&
            a + b > c && a + c > b && b + c > a) {

            // 2. 畢達哥拉斯定理 (用長整數防溢位)
            long long aa = 1LL * a * a;
            long long bb = 1LL * b * b;
            long long cc = 1LL * c * c;

            if (aa + bb == cc || aa + cc == bb || bb + cc == aa) {
                printf("right\n");
            } else {
                printf("wrong\n");
            }
        } else {
            printf("wrong\n");  // 不滿足三角形基本條件
        }
    }
    return 0;
}

關鍵細節

細節說明
溢位防護邊長上限未給,int 平方可能溢位 (32767² > 2³¹)。用 long long (64 位) 計算平方。
輸入結束條件while (scanf(...) == 3) 處理 EOF;0 0 0 為題目指定終止,不輸出。
邊長順序不固定斜邊可能是 a、b、c 任一,必須檢查三種組合。
退化三角形a+b==c 面積為 0,非三角形,直接 wrong。

測試案例

輸入輸出說明
3 4 5right經典 3-4-5 直角三角形
5 12 13right5-12-13
6 8 10right3-4-5 的 2 倍
1 1 1wrong正三角形,非直角
2 3 4wrong非直角
1 2 3wrong退化 (1+2=3)
0 0 0(程式結束)終止輸入

延伸:浮點數邊長判斷

若輸入為浮點數,直接比較 == 不可靠,需引入**容差 (epsilon)**:

#include 
#define EPS 1e-9

int is_right_double(double a, double b, double c) {
    if (a <= 0 || b <= 0 || c <= 0) return 0;
    if (a + b <= c || a + c <= b || b + c <= a) return 0;
    double aa = a*a, bb = b*b, cc = c*c;
    return (fabs(aa + bb - cc) < EPS) ||
           (fabs(aa + cc - bb) < EPS) ||
           (fabs(bb + cc - aa) < EPS);
}

總結

直角三角形判斷 = 三角形不等式 + 畢達哥拉斯定理。關鍵技巧:用 64 位整數防平方溢位、檢查三種斜邊可能、正確處理輸入終止條件。這是幾何計算類 OJ 題的基礎模板。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved