3つの整数が与えられ、2つの手法に則って同じ数にするには何回の操作が必要かを求める問題。
模範解答の解説は読んでも理解できなかったため、自分なりの解法で解いた。
#解法
3つの数字を配列に入れ、ソートを昇順でかける。
例)4,8,5
Arrays.sortメソッドを使うと
4,5,8の順番に入れ替わる。
array[0]<array[1]の間はarray[0]を+2する。
array[0]==array[1]になった時、array[0]++,array[1]++する。
またwhile文の最初に戻り、Array.sortメソッドを行う。
今回の例の場合、
array[0]が+2され、6,5,8になり、
メソッドによって、5,6,8の順番に入れ替わる。
これを何度も繰り返すことによって解が求まる。
しかし、この方法がなぜ最短になるのかは、自分には証明ができないので、わかる方がいたら、コメントに残してほしい。
import java.util.Arrays;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
int [] array = new int[3];
array[0] = stdIn.nextInt();
array[1] = stdIn.nextInt();
array[2] = stdIn.nextInt();
int cnt = 0;
while(true) {
Arrays.sort(array);
if(array[0] == array[1] && array[1] == array[2]) {
break;
}
if(array[0]<array[1]) {
cnt++;
array[0] += 2;
continue;
}
if(array[0] == array[1]) {
cnt++;
array[0]++;
array[1]++;
}
}
System.out.println(cnt);
}
}