题目描述
有三种葡萄,每种分别有\mathit a,b,ca,b,c颗。有三个人,第一个人只吃第\text 1,21,2种葡萄,第二个人只吃第\text 2,32,3种葡萄,第三个人只吃第\text 1,31,3种葡萄。
适当安排三个人使得吃完所有的葡萄,并且且三个人中吃的最多的那个人吃得尽量少。
输入描述:
第一行数字\mathit TT,表示数据组数。
接下来\mathit TT行,每行三个数\mathit a,b,ca,b,c
1 \leq a,b,c \leq 10^{18} , 1 \leq T \leq 101≤a,b,c≤10
18
,1≤T≤10
输出描述:
对于每组数据,输出一行一个数字表示三个人中吃的最多的那个人吃的数量。
示例1
输入
复制
2
1 2 3
1 2 6
输出
复制
2
3
示例2
输入
复制
1
12 13 11
输出
复制
12
解题思路
我们可以通过a\b\c的长度关系来确定是否可以三者平分---如果可以平分那么结果就是和分三分之后的向上取整:(sum+2)/3.
如果a+b比c的一半还少,那么只能让一个人吃完a和b,剩下两个平分c:(c+1)/2;
以后需要联系算法的输入和输出
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in);//输入 while(in.hasNext()){ int n=in.nextInt(); if(n==0){ System.out.println(0); } else{ for(int i=0;i<n;i++){ long[] num=new long[3]; num[0]=in.nextLong(); num[1]=in.nextLong(); num[2]=in.nextLong(); Arrays.sort(num); long sum=num[0]+num[1]+num[2]; if(num[0]+num[1]>num[2]){//可以构成三角形 System.out.println((sum+2)/3); } else if(2*(num[0]+num[1])<num[2]){//严重不平均 System.out.println((num[2]+1)/2); } else{ System.out.println((sum+2)/3); } } } } } }