首页 > 试题广场 >

吃葡萄

[编程题]吃葡萄
  • 热度指数:7103 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有三种葡萄,每种分别有颗。有三个人,第一个人只吃第种葡萄,第二个人只吃第种葡萄,第三个人只吃第种葡萄。
适当安排三个人使得吃完所有的葡萄,并且且三个人中吃的最多的那个人吃得尽量少。

输入描述:
第一行数字,表示数据组数。
接下来行,每行三个数



输出描述:
对于每组数据,输出一行一个数字表示三个人中吃的最多的那个人吃的数量。
示例1

输入

2
1 2 3
1 2 6

输出

2
3
示例2

输入

1
12 13 11

输出

12
/**
  * JavaScript版本
 * 考虑,尽可能平均地分配葡萄,才能让吃的多的人吃的最少。而/_\a,b,c可以组成一个三角形,当然如果c边过大,那么考虑将c分成两段。
 * 取最长边设置为c
 * 情况一:a+b>c,那么只要找到a,b,c边的中点即可平分,但有可能不能整除,用Math.ceil()向上取整
 * 情况二:a+b<=c, 若c>2*(a+b),那么只要取c的中点,否则还是可以去a,b,c三者中点,向上取整即可。
 */
let input = [];
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
})

function solution(input){
    let n = parseInt(input[0]);
    let res = [];
    for(let i=1;i<n+1;i++){
        let arr = input[i].split(' ').map(x=>parseInt(x));
        arr.sort((a,b)=>(a>b)?1:a<b?-1:0);
        let a = arr[0], b = arr[1], c = arr[2];
        console.log(ave(a,b,c));
    }
}

function ave(a,b,c){
    let sum  = a + b + c;
    if(a+b>c){
    //res.push(Math.ceil(sum/3));
        return Math.ceil(sum/3);
    }
    if(c>2*(a+b)){
         return Math.ceil(c/2);
    }
    return Math.ceil(sum/3);
}

rl.on('line',line=>{
    input.push(line);
    let n = parseInt(input[0]);
    if(input.length===n+1){
        solution(input);
    }
})

/***************************************************************************/
// 使用BigInt来解决Number越界问题
let input = []; const readline = require('readline'); const rl = readline.createInterface({     input: process.stdin,     output: process.stdout  }) function solution(input){     let n = parseInt(input[0]);     // console.log(input);      // console.log(2**53 - 1);      for(let i=1;i<n+1;i++){         let arr = input[i].split(' ').map(x=>BigInt(x));         arr.sort((a,b)=>(a>b)?1:a<b?-1:0);         let a = arr[0], b = arr[1], c = arr[2];         console.log(ave(a,b,c).toString());     } } function ave(a,b,c){     let sum  = a + b + c;     // console.log(a,b,c,a+b,a+b>c);      if(a+b>c){     //res.push(Math.ceil(sum/3));          return (sum + 2n) / 3n;     }     if(c>2n*(a+b)){          return (c+1n)/ 2n;     }     return (sum+2n) / 3n; } rl.on('line',line=>{     input.push(line);     let n = parseInt(input[0]);     if(input.length===n+1){         solution(input);     } })

编辑于 2021-01-30 13:45:29 回复(0)