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

清风雪月

2021-09-22 18:54:22

Personal

无法提交题解题的题解 ------------ 一个很适合练手的数学题 ------------ 我们一共要判断六种情况,按照题目给出的 如果三条线段不能组成一个三角形,输出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; } ```