题目描述
给出三条线段 a,b,ca,b,c 的长度,均是不大于 1000010000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?
- 如果三条线段不能组成一个三角形,输出
Not triangle
;- 如果是直角三角形,输出
Right triangle
;- 如果是锐角三角形,输出
Acute triangle
;- 如果是钝角三角形,输出
Obtuse triangle
;- 如果是等腰三角形,输出
Isosceles triangle
;- 如果是等边三角形,输出
Equilateral triangle
。如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。
输入格式
输入 3 个整数 aa、bb 和 cc。
输出格式
输出若干行判定字符串。
输入输出样例
输入 #1
3 3 3输出 #1
Acute triangle Isosceles triangle Equilateral triangle输入 #2
3 4 5输出 #2
Right triangle输入 #3
6 10 6输出 #3
Obtuse triangle Isosceles triangle输入 #4
1 14 5输出 #4
Not triangle说明/提示
当两短边的平方和大于一长边的平方,说明是锐角三角形。
当两短边的平方和等于一长边的平方,说明是直角三角形。
当两短边的平方和小于一长边的平方,说明是钝角三角形。
按从大到小排列:
if(a>b) swap(a,b);
if(a>c) swap(a,c);
if(b>c) swap(b,c);
如果两边之和大于第三边,就无法构成三角形:
if(a+b<=c) cout<<"Not triangle"<<endl;
当他是直角时的长度:
double n=sqrt(a*a+b*b);
如果相等就是直角:
if(n==c) cout<<"Right triangle"<<endl;
如果偏大就是锐角:
if(n>c) cout<<"Acute triangle"<<endl;
如果偏小就是钝角:
if(n<c) cout<<"Obtuse triangle"<<endl;
判断等腰:
if(a==b||b==c) cout<<"Isosceles triangle"<<endl;
判断等边:
if(a==b&&b==c) cout<<"Equilateral triangle"<<endl;
记得按顺序写!
源代码:
#include<iostream>
#include<cstdio>
#include<cmath>
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);//按从大到小排列
if(a+b<=c) cout<<"Not triangle"<<endl;//如果两边之和大于第三边,就无法构成三角形
else{
double n=sqrt(a*a+b*b);//当他是直角时的长度
if(n==c) cout<<"Right triangle"<<endl;//如果相等就是直角
if(n>c) cout<<"Acute triangle"<<endl;//如果偏大就是锐角
if(n<c) cout<<"Obtuse triangle"<<endl;//如果偏小就是钝角
if(a==b||b==c) cout<<"Isosceles triangle"<<endl;//判断等腰
if(a==b&&b==c) cout<<"Equilateral triangle"<<endl;//判断等边
}
return 0;
}