三角形判断
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:1828 测试通过:295
总提交:1828 测试通过:295
描述
给定三条边的长度,判断能否组成三角形,如果可以,判断三角形的形状。
输入
一组数据,每行三个实数,在(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
考点一:
如何判断三条边是不是能够组成三角形?
看看最小的两个数相加是不是大于最大的那个书 第一种情况:判断b+c>a,成立就能构成三角形(这种方法较为简单) 第二种情况,不知道大小,要求a+b>c;b+c>a;c+a>b三个式子都符合就能构成三角形
考点二:float型数值如何比较相等
float值如何比较相等,作为一个有经验的程序员,应该使用Math.abs(a-b)<1E-6(这个为要求的精度)
package yx.njuptacm;
import java.util.Arrays;
import java.util.Scanner;
public class ACM1013 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextFloat()){
float a=sc.nextFloat();
float b=sc.nextFloat();
float c=sc.nextFloat();
if(Math.abs(a-0)<1E-4&&Math.abs(b-0)<1E-4&&Math.abs(b-0)<1E-4){
System.out.println("End");
return;
}
fun(a,b,c);
}
}
private static void fun(float a, float b, float c) {
float max,mid,min;
float[] arr={a,b,c};
Arrays.sort(arr);
min=arr[0];
mid=arr[1];
max=arr[2];
if(mid+min>max){
if(mid-min<1E-4){//两条小边相等(至少是等腰三角形)
if(max-mid<1E-4){//等边三角形
System.out.println("Equilateral triangle");
}else if(max*max-min*min-mid*mid<1E-4){//等腰直角三角形
System.out.println("Isosceles right triangle");
}else{//普通等腰三角形
System.out.println("Isosceles triangle");
}
}else if(max*max-min*min-mid*mid<1E-4){//普通直角三角形
System.out.println("Right triangle");
}else{//普通三角形
System.out.println("General triangle");
}
}else{//不是三角形
System.out.println("Not a triangle");
}
}
}