南邮ACM 1013 三角形判断 JAVA解法

13 篇文章 0 订阅
12 篇文章 0 订阅

三角形判断

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交: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");
		}
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值