P5717 【深基3.习8】三角形分类题解
清风雪月
2021-09-22 18:54:22
无法提交题解题的题解
------------
一个很适合练手的数学题
------------
我们一共要判断六种情况,按照题目给出的
如果三条线段不能组成一个三角形,输出Not triangle;
如果是直角三角形,输出Right triangle;
如果是锐角三角形,输出Acute triangle;
如果是钝角三角形,输出Obtuse triangle;
如果是等腰三角形,输出Isosceles triangle;
如果是等边三角形,输出Equilateral triangle。
------------
那么什么情况是无法组成三角形的呢?
我们知道,三角形的三条边(以a[1],a[2],a[3]代称),如果出现一条边大于或等于另外两条边的和,那么它就无法组成三角形
因此可以得出这个判断:
a[1]+a[2]<=a[3]||a[1]+a[3]<=a[2]||a[2]+a[3]<=a[1]\
它代表判断任意两条边之和是否大于剩下一条边
------------
直角、锐角、钝角则更好判断\
当两短边的平方和大于一长边的平方,说明是锐角三角形。
当两短边的平方和等于一长边的平方,说明是直角三角形。
当两短边的平方和小于一长边的平方,说明是钝角三角形。
------------
接着我们来看剩下两个
什么是等腰三角形?
等腰三角形就是有两条边相等的三角形
因此我们可以这样判断
a[1]==a[2]||a[2]==a[3]||a[3]==a[1]
那么只剩下等边三角形了
这个就更好判断了,只需要判断是否每条边都相等即可
------------
写的时候一定要记住,要按顺序,如果你看懂了,要不先自己试试写写代码或者修改一下呢?\
下面上代码(没有注释,想复制请先看一看解析再领代码哦
```
//柠月
#include<bits/stdc++.h>
using namespace std;
int a[4];
int main()
{
cin>>a[1]>>a[2]>>a[3];
sort(a+1,a+1+3);
if(a[1]+a[2]<=a[3]||a[1]+a[3]<=a[2]||a[2]+a[3]<=a[1]){
cout<<"Not triangle\n";
return 0;
}
if(a[1]*a[1]+a[2]*a[2]==a[3]*a[3])cout<<"Right triangle\n";
if(a[1]*a[1]+a[2]*a[2]>a[3]*a[3])cout<<"Acute triangle\n";
if(a[1]*a[1]+a[2]*a[2]<a[3]*a[3])cout<<"Obtuse triangle\n";
if(a[1]==a[2]||a[2]==a[3]||a[3]==a[1])cout<<"Isosceles triangle\n";
if(a[1]==a[2]&&a[2]==a[3]&&a[1]==a[3])cout<<"Equilateral triangle\n";
return 0;
}
```