三角形判断
时间限制(普通/Java) : 1000MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 3151 测试通过 : 524
比赛描述
给定三条边的长度,判断能否组成三角形,如果可以,判断三角形的形状。
输入
一组数据,每行三个实数,在(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
来自 <http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1013>
#include<stdio.h>
#include<math.h>
voidshow_result(float a,float b,float c);
int main()
{
int i=0,j;
float a[300],b[300],c[300];
scanf("%f %f%f",&a[i],&b[i],&c[i]);
while(a[i]!=0||b[i]!=0||c[i]!=0)
{
i++;
scanf("%f %f%f",&a[i],&b[i],&c[i]);
}
for(j=0;j<i;j++)
show_result(a[j],b[j],c[j]);
printf("End\n");
return 0;
}
voidshow_result(float a,float b,float c)
{
float max,mini,mid;
max=(a>b?a:b)>c?(a>b?a:b):c;
mini=(a<b?a:b)<c?(a<b?a:b):c;
mid=a+b+c-max-mini;
if(max!=0&&mid!=0&&mini!=0)
{
if(max<mid+mini)
{
if(max==mid||mid==mini)
{
if(fabs(max*max-(mini*mini+mid*mid))<0.001)
printf("Isoscelesright triangle\n");
elseif(max==mid&&mid==mini)
printf("Equilateraltriangle\n");
else
printf("Isoscelestriangle\n");
}
elseif(fabs(max*max-(mini*mini+mid*mid))<0.001)
printf("Righttriangle\n");
else
printf("Generaltriangle\n");
}
else
printf("Not atriangle\n");
}
else
printf("Not a triangle\n");
}