编程题
题目:
-
题目描述:
-
牛牛有三个整数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);
}
}