题目:给定三条边a\b\c,请你判断一下能不能组成一个三角形
输入描述:
输入包含多组数据,每组数据包含三个正整数a、b、c(1≤a, b, c≤10^100)
输出描述:
对应每一组数据,如果它们能组成一个三角形,则输出"Yes";否则,输出"No"。
实现思路:
1.因为要输入多组数据,所以将所有代码放在while循环里。
2.因为输入的数字可能是超大整数,所以直接定义BigInteger保存超大整数
3.找出最大值、最小值、中间值 ,由于是引用数据类型,所以用compareTo进行三元运算
4.比较:若Max<(Min+Mid),则可以说明任意两边之和大于第三边
java
package com.ztt.Demo01;
import java.math.BigInteger;
import java.util.Scanner;
//给定三条边a\b\c,请你判断一下能不能组成一个三角形
// 1 <= a\b\c <= 10^100
public class demo01 {
public static void main(String[] args) {
//定义BigInteger保存超大整数
Scanner input=new Scanner(System.in);
BigInteger a=null;
BigInteger b=null;
BigInteger c=null;
while(input.hasNext()) {
a=input.nextBigInteger();
b=input.nextBigInteger();
c=input.nextBigInteger();
//1.找出max、 min、mid
// max
// a > b ? (a > c ? a : c) : (b > c ? b : c)
BigInteger max=(a.compareTo(b)>=0)?(a.compareTo(c)>0 ?a:c):(b.compareTo(c)>0 ?b:c);
// min
// a < b ? (a < c ? a : c) : (b < c ? b : c)
BigInteger min=(a.compareTo(b)<=0)?(a.compareTo(c)<0 ?a:c):(b.compareTo(c)<0 ?b:c);
//mid
//(a+b+c)-max-min
BigInteger mid=a.add(b).add(c).subtract(max).subtract(min);
//(max<(min+mid))? "YES" : "NO";
String ret=max.compareTo(min.add(mid))<0 ? "YEA":"NO";
System.out.println(ret);
}
}
}
运行结果:
java
1 2 3
NO
5 12 13
YES