描述
给定三条边的长度,判断能否组成三角形,如果可以,判断三角形的形状。
输入
一组数据,每行三个实数,在(0,10]之间,精确到小数点后第四位。最后以0 0 0表示结束。
输出
根据每行的数据判断,如果不能组成三角形,则输出“Not a triangle”;如果是“等腰三角形”,则输出“Isosceles triangle”;如果是“直角三角形”,则输出“Right triangle”;如果是“等腰直角三角形”,则输出“Isosceles right triangle”;如果是“等边三角形”,则输出“Equilateral triangle”;否则,输出“General triangle”。最后输出一行“End”。
样例输入
1.4142 1.4142 2
1.0000 4.0000 5.0000
0 0 0
样例输出
Isosceles right triangle
Not a triangle
End
提示
题目来源
GUOJ
//1013
#include "stdio.h"
#include "math.h"
int IsTri(double a,double b,double c)
{
if(a+b-c>1e-3&&a+c-b>1e-3&&b+c-a>1e-3)
{
return 1;
}
else
{
return 0;
}
}//是否是三角形
int Equal2(double a,double b,double c)
{
if((fabs(a-b)<1e-3&&fabs(a-c)>1e-3)||(fabs(a-c)<1e-3&&fabs(a-b)>1e-3)||(fabs(b-c)<1e-3&&fabs(a-c)>1e-3))
{
return 1;
}
else
{
return 0;
}
}//是否有两边相等
int Right(double a ,double b,double c)
{
double aa,bb,cc;
aa=a*a;
bb=b*b;
cc=c*c;
if(fabs(aa+bb-cc)<1e-3)
{
return 1;
}
else
{
return 0;
}
}//是否满足勾股定理
int Equal3(double a,double b,double c)
{
if(fabs(a-b)<1e-3&&fabs(a-c)<1e-3)
{
return 1;
}
else
{
return 0;
}
}//是否三边相等
int main()
{
double a,b,c;
double temp;
while(1)
{
scanf("%lf %lf %lf",&a,&b,&c);
if(0==a)
{
break;
}
if(a>b)
{
temp=a;
a=b;
b=temp;
}
if(b>c)
{
temp=b;
b=c;
c=temp;
}
if(IsTri(a,b,c))
{
if(Equal2(a,b,c)&&!Equal3(a,b,c)&&!Right(a,b,c))
{
printf("Isosceles triangle\n");
}
else if(!Equal2(a,b,c)&&Right(a,b,c))
{
printf("Right triangle\n");
}
else if(Equal2(a,b,c)&&!Equal3(a,b,c)&&Right(a,b,c))
{
printf("Isosceles right triangle\n");
}
else if(Equal3(a,b,c))
{
printf("Equilateral triangle\n");
}
else
{
printf("General triangle\n");
}
}
else
{
printf("Not a triangle\n");
}
}
printf("End\n");
return 0;
}
abs针对整数
fabs针对浮点数
精度要求
scanf输入输出格式