专栏文章

题解:P5717 【深基3.习8】三角形分类

P5717题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mipbv0r0
此快照首次捕获于
2025/12/03 09:27
3 个月前
此快照最后确认于
2025/12/03 09:27
3 个月前
查看原文

前置芝士

三条边能构成三角形的条件:
三条边能构成三角形的充分必要条件时两条最小边之和大于第三边。(这是容易证明的)
勾股定理:
一个三角形是直角三角形的充分必要条件是两直角边的平方和是其斜边的平方。
说直白点,我们设直角 ABC\triangle ABC 中,C=90,AB=c,BC=a,CA=b\angle C = 90^{\circ},AB=c,BC=a,CA=b
那么
a2+b2=c2a^2+b^2=c^2
证明的话就略去了。
余弦定理:
ABC\triangle ABC 中,AB=c,BC=a,CA=bAB=c,BC=a,CA=b,则
a2+b2c22ab=cosC\frac{a^2+b^2-c^2}{2ab} = \cos \angle C
其实不难发现,当 C=π2\angle C = \frac{\pi}{2} 时,上式就变为 a2+b2c2=0a^2+b^2-c^2 = 0,也就是勾股定理。
然而这个结论更强,因为当 C>π2\angle C > \frac{\pi}{2}C<π2\angle C < \frac{\pi}{2} 时,我们也可以得到 a2+b2a^2+b^2c2c^2 的大小关系。
具体地,若 C>π2\angle C > \frac{\pi}{2}a2+b2<c2a^2+b^2<c^2;反之,若 C<π2\angle C < \frac{\pi}{2}a2+b2<c2a^2+b^2<c^2。这是因为 2ab>02ab > 0a2+b2c2=2abcosCa^2+b^2-c^2 = 2ab\cos \angle C 可得 a2+b2c2a^2+b^2-c^2 的正负性与 cosC\cos \angle C 相同。

解题思路

OK,把刚刚说的全部放在一边。我们来看看题目要我们求啥。
题目给定三角形的三边,让我们判断它是否具有三角形的某些特质。
首先我们判断是否能构成一个三角形。
那么根据我们刚刚说的,直接判断即可。
那么我们分两类:
  • 若不能构成三角形,那么接下来的都不用做了。
  • 若能构成三角形,那么我们把接下来的工作分成两类:
    1. 这是否是一个等腰或等边三角形?
    2. 这个三角形是锐角,直角,还是钝角三角形?
第一个问题,我们直接判断三遍是否有等量关系即可。
为解决上面的第二个问题,我们就要用到刚刚提到的余弦定理了。
那么到这里,这道题的思路部分是讲完了,那就看看下面的代码。

代码

CPP
#include<iostream>
using namespace std;

int main() {
    int a, b, c; cin >> a >> b >> c;
    if(a > b) swap(a, b);
    if(a > c) swap(a, c);
    if(b > c) swap(b, c); // 将 a, b, c 按从小到大排序
    if(a + b <= c) {cout << "Not triangle" << endl; return 0;} // 注意要结束程序
    if(a * a + b * b == c * c) 
        cout << "Right triangle" << endl;
    if(a * a + b * b > c * c)
        cout << "Acute triangle" << endl;
    if(a * a + b * b < c * c)
        cout << "Obtuse triangle" << endl;
    //判断按角分类的三角形
    if((a == b || a == c)||(c == b || a == c)||(a == b || b == c))
        cout << "Isosceles triangle" << endl;
    if(a == b && a == c && b == c)
        cout << "Equilateral triangle" << endl;
    //判断按边分类的三角形
    return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...