1 条题解

  • 0
    @ 1976-11-8 23:42:02

    【深基3.习8】三角形分类

    解题思路

    先升序排序三条边,记为 a≤b≤c。若 a+b≤c 则不能构成三角形;否则用 a²+b² 与 c² 比较角类型,再独立判断等腰、等边。

    正确性说明

    排序后只需检验两短边之和是否大于最长边。余弦定理给出三种角类型的平方关系;边相等条件直接决定等腰和等边。

    易错点

    无效三角形只输出 Not triangle 并结束;等边也属于等腰,两个标签都要输出。

    复杂度

    时间 O(1),空间 O(1)。

    参考代码(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        long long a[3];
        cin >> a[0] >> a[1] >> a[2];
        sort(a, a + 3);
        if (a[0] + a[1] <= a[2]) {
            cout << "Not triangle\n";
            return 0;
        }
        long long s = a[0] * a[0] + a[1] * a[1], t = a[2] * a[2];
        if (s == t)
            cout << "Right triangle\n";
        else if (s > t)
            cout << "Acute triangle\n";
        else
            cout << "Obtuse triangle\n";
        if (a[0] == a[1] || a[1] == a[2])
            cout << "Isosceles triangle\n";
        if (a[0] == a[2])
            cout << "Equilateral triangle\n";
        return 0;
    }
    
    • 1

    信息

    ID
    48
    时间
    1000ms
    内存
    128MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者