2018爱奇艺Java研发实习生春招笔试题——三个整数

编程题

题目:

题目描述:
牛牛有三个整数X, Y, Z. 牛牛现在要使用若干次操作让X, Y, Z变为相等,每次操作牛牛有两种操作类型可选:
操作1:从X, Y, Z中选择两个数,都加1
操作2:从X, Y, Z中选择一个数,加2
牛牛已经证明了使用若干次这两种操作一定可以让三个整数变为相等,请你帮他计算一下最少需要多少次操作。
输入描述:
输入包括三个整数A ,B,C(0 <= A,B,C <= 100)。
输出描述:
输出一个整数,表示最少需要的操作次数。
定义D内容
示例1:
输入:
2 5 4
输出:
2

思路:

对数组升序排序,计算两个较小数与最大数的差值n1, n2 (n1 > n2),先选较小的两个数进行加1操作,直至有两个数相等(即第二小的数与最大数),接着对较小数进行加2操作。注意:此时若第三个数与它们的差为奇数,则还需(差/2 + 2)次操作,若为偶数则还需(差/2)次操作。

例1: (2, 4, 5) -> (3, 5, 5) -> (5, 5, 5)
需 (n1 + (n2 - n1) / 2) 次操作

例2: (1, 4, 5) -> (2, 5, 5) -> (4, 5, 5) -> (6, 5, 5) -> (6, 6, 6)
需 (n1 + (n2 - n1) / 2 + 2) 次操作

代码:

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int[] num = new int[3];
        for(int i=0; i<3; i++) {
            num[i] = in.nextInt();
        }
        Arrays.sort(num);
        //排序后计算三个数中两两之间最大差n1与最小差n2
        int n1 = num[2]-num[0];
        int n2 = num[2]-num[1];
        int count = 0;
        //判断两种情况
        if((n1-n2) %2 == 1) {
            count = n2 + (n1-n2)/2 + 2;
        }
        else {
            count = n2 + (n1-n2)/2;
        }
        System.out.println(count);
    }
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值