top1编程
← 返回题目
题解

判断三角形

1 条题解

  • 0
    @ 2026-8-4 10:17:30

    解题思路

    要判断三根小棒能不能围成一个三角形,有一个重要的规则叫“三角形不等式”:任意两边之和必须大于第三边。

    为什么要有这个规则?你可以想象:如果两根短棒加起来还没有第三根长,那么把它们首尾相接,也够不到第三根的两头,中间就会断开,自然围不成三角形。只有两短边之和“撑得住”,三根棒才能首尾相连。

    所以我们需要同时检查三个不等式:

    • a + b > c
    • b + c > a
    • c + a > b

    只有当这三个不等式都成立时,三根棒才能构成三角形。在程序里,“三个条件同时成立”用逻辑与运算符 && 连接,它表示“并且”。

    有两个边界要注意:

    1. 题目里边长可以等于 0。如果有一条边是 0,比如 a = 0,那么 b + 0 > c 和 0 + c > b 不可能同时成立,所以输出 NO,这正好说明长度为零的“边”不可能构成三角形;
    2. 当两边之和等于第三边时,比如 a + b == c,三点会排在一条直线上,也围不成三角形。所以必须用大于号 >,不能写成 >=。

    参考代码

    #include using namespace std;

    int main() { int a, b, c; // a、b、c 分别表示三条边的长度 cin >> a >> b >> c; // 读入三条边

    // 三个条件同时成立:任意两边之和大于第三边
    if (a + b > c && b + c > a && c + a > b) {
        cout << "YES" << endl;   // 能构成三角形
    } else {
        cout << "NO" << endl;    // 不能构成三角形
    }
    return 0;
    

    }

    复杂度分析

    程序只读入三个整数,做三次加法和一次组合判断,运算次数固定,与边长的大小无关,时间复杂度是 O(1)。只用了三个 int 变量,空间复杂度也是 O(1)。

    • 1