經典 UVa / POJ 題目「Egypt」:輸入三邊長 a,b,c,判斷能否構成直角三角形。終止條件為 0 0 0。輸出 right 或 wrong。
a+b>c && a+c>b && b+c>a(且均 >0)。a²+b²==c² || a²+c²==b² || b²+c²==a²。#include <stdio.h>
int main() {
int a, b, c;
while (scanf("%d %d %d", &a, &b, &c) == 3) {
if (a == 0 && b == 0 && c == 0) break;
// 簡單排序使 c 為最大邊,簡化判斷
if (a > b) { int t=a; a=b; b=t; }
if (b > c) { int t=b; b=c; c=t; }
if (a > b) { int t=a; a=b; b=t; }
// 現在 a <= b <= c
if (a + b > c && a*a + b*b == c*c)
puts("right");
else
puts("wrong");
}
return 0;
}
c,只需檢查 a²+b²==c²,碼更簡潔。a²+b²==c² 且 a,b,c>0,必然滿足 a+b>c(證明:(a+b)² = a²+b²+2ab = c²+2ab > c² ⇒ a+b>c)。puts:輸出固定字串更高效。若輸入為浮點數,需引入誤差閾值:
const double EPS = 1e-9;
if (fabs(a*a + b*b - c*c) < EPS) // 判定直角
並注意邊長為 0 或負數的非法輸入過濾。
古埃及繩結師使用 12 節等分繩子拉成 3-4-5 三角形測量直角,此即勾股數最早應用。本題致敬該歷史。