一、题目
题目描述
给出 6 根棍子,能否在选出 3 根拼成一个三角形的同时剩下的3根也能组成一个三角形?
输入描述:
首先在一行中给出一个 t, 1 ≤ t ≤ 10 ^ 3,代表测试数据的组数
接下来t行,每行给出6个数字代表棍子长度,棍子长度为正且小于 10 ^ 9
输出描述:
在一行中输出 “Yes” or “No”
示例1
输入
2 1 1 1 1 1 1 1 2 3 4 5 6
输出
Yes
No
二、思路解析
这道题所需要的,其实就是利用贪心算法,找出这条规律:能组成三角形的三条边中,两条最短边之和一定大于第三边。
注意,是最短边,如果是任意两条边,那样会加大我们的工作量的。
但贪心的点就在于,要是连两条最短边相加,都大于第三边了,那其他任意两边之和,一定也会大于第三边的。
解决了这一点之后,剩下的都是基础的代码啦,具体实现请看下面代码👇
三、完整代码
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(bf.readLine());
while(t-- != 0){
String[] input = bf.readLine().split(" ");
int[] arr = new int[6];
for(int i = 0; i < 6; i++){
arr[i] = Integer.parseInt(input[i]);
}
Arrays.sort(arr);
boolean canFormTriangles = arr[0] + arr[1] > arr[2] && arr[3] + arr[4] > arr[5] ||
arr[0] + arr[2] > arr[3] && arr[1] + arr[4] > arr[5]
|| arr[0] + arr[3] > arr[4] && arr[1] + arr[2] > arr[5]
|| arr[0] + arr[4] > arr[5] && arr[1] + arr[2] > arr[3];
if(canFormTriangles){
System.out.println("Yes");
}else{
System.out.println("No");
}
}
}
}
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!