【深基3.习8】三角形分类
题目描述
给出三条线段 a , b , c a,b,c a,b,c 的长度,均是不大于 10000 10000 10000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?
- 如果三条线段不能组成一个三角形,输出
Not triangle
; - 如果是直角三角形,输出
Right triangle
; - 如果是锐角三角形,输出
Acute triangle
; - 如果是钝角三角形,输出
Obtuse triangle
; - 如果是等腰三角形,输出
Isosceles triangle
; - 如果是等边三角形,输出
Equilateral triangle
。
如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。
输入格式
输入 3 个整数 a a a、 b b b 和 c c c。
输出格式
输出若干行判定字符串。
样例 #1
样例输入 #1
3 3 3
样例输出 #1
Acute triangle
Isosceles triangle
Equilateral triangle
样例 #2
样例输入 #2
3 4 5
样例输出 #2
Right triangle
样例 #3
样例输入 #3
6 10 6
样例输出 #3
Obtuse triangle
Isosceles triangle
样例 #4
样例输入 #4
1 14 5
样例输出 #4
Not triangle
提示
当两短边的平方和大于一长边的平方,说明是锐角三角形。
当两短边的平方和等于一长边的平方,说明是直角三角形。
当两短边的平方和小于一长边的平方,说明是钝角三角形。
思路:我们开始一想到长边短边就优先考虑先排序后判断是否是三角形,所以就有了先排序,然后记得直角钝角锐角可以用一个ifelse,然后等腰跟等边不能用一个ifelse因为等腰可能也是等边。
注:大家在复制输出的时候千万要注意,不要少复制一两个字母,不然找错会让你崩溃,我就是复制输出的时候,等边三角形少复制一个小写字母e,让我找半天问题出在哪里
代码如下(编译器dev,语言是C语言):
#include<stdio.h>
int a[3],i,j,temp,k=0;
int main(){
for(i = 0;i<3;i++){
scanf("%d",&a[i]);
}
for(i = 0;i<3;i++){
for(j = i+1;j<3;j++){
if(a[i]>a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
if(a[0]+a[1]<=a[2]){
printf("Not triangle\n");
return 0;
}
if(a[0]*a[0]+a[1]*a[1] == a[2]*a[2]){
printf("Right triangle\n");
}else if(a[0]*a[0]+a[1]*a[1] > a[2]*a[2]){
printf("Acute triangle\n");
}else if(a[0]*a[0]+a[1]*a[1] < a[2]*a[2]){
printf("Obtuse triangle\n");
}
if(((a[0] == a[1]))||((a[2] == a[1]))){
printf("Isosceles triangle\n");
}
if((a[0] == a[1])&&(a[1] == a[2])){
printf("Equilateral triangle\n");
}
return 0;
}