12個の同じ形のボールがあって、1つのボールの重量が異なって、3回ボールと軽重を確定します
原題:12個の卓球の形状、大きさは同じで、その中に1つの重量だけが他の11個と異なっていて、今1部の分銅のない天秤で3回量って、その重量の異常なボールを探し出して、しかもそれが他の11個のボールより重いか軽いかを知っています.
次はプログラムの実装で、mainの中にはファイルを読み取る段があり、テストデータのたびにコンパイルしたくない.
次はプログラムの実装で、mainの中にはファイルを読み取る段があり、テストデータのたびにコンパイルしたくない.
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
public class Test{
public static void main(String args[]) throws Exception{
File file = new File("test.dat");
BufferedReader in = new BufferedReader(new FileReader(file));
String line = "";
if((line=in.readLine()) != null){
int[] arr = new int[12];
int i=0;
for(String s : line.split(",")){
if(i < 12)
arr[i] = Integer.parseInt(s);
else
break;
i++;
}
System.out.println(getDiffent(arr));
}
}
public static String getDiffent(int[] arr){
// ,A,B,C
int a1 = arr[0];
int a2 = arr[1];
int a3 = arr[2];
int a4 = arr[3];
int b1 = arr[4];
int b2 = arr[5];
int b3 = arr[6];
int b4 = arr[7];
int c1 = arr[8];
int c2 = arr[9];
int c3 = arr[10];
int c4 = arr[11];
int sumA = a1+a2+a3+a4;
int sumB = b1+b2+b3+b4;
int sumC = c1+c2+c3+c4;
String result = "12 ";
// , A B , C
if(sumA == sumB){
// , C AB
int sum3C = c1+c2+c3;
int sum3AB = a1+a2+a3;
// , c4,
if(sum3C == sum3AB){
if(c4 > c1) //
result = " 12 ";
else if(c4 < c1)
result = " 12 ";
}
// C AB , C ,
else if(sum3C > sum3AB){
// c1,c2 , , c3,
if(c1 == c2)
result = " 11 ";
else if(c1 > c2)
result = " 9 ";
else
result = " 10 ";
}
// C AB , C ,
else if(sum3C < sum3AB){
// c1,c2 , , c3,
if(c1 == c2)
result = " 11 ";
else if(c1 > c2)
result = " 10 ";
else
result = " 9 ";
}
}
// ,A B , A , B
else if(sumA > sumB){
// , C +a1 (a2,a3,a4)+(b1,b2)
if(sumC+a1 == a2+a3+a4+b1+b2){ // , b3 b4 ,
// ,b3 b4
if(b3 > b4)
result = " 8 ";
else
result = " 7 ";
}
else if(sumC+a1 > a2+a3+a4+b1+b2){ // , a1,b1,b2
// ,b1 b2
if(b1 == b2)
result = " 1 ";
else if(b1 > b2)
result = " 6 ";
else
result = " 5 ";
}
else{ // , a2,a3,a4
// ,a2 a3
if(a2 == a3)
result = " 4 ";
else if(a2 > a3)
result = " 2 ";
else
result = " 3 ";
}
}
// ,A B , A , B
else{
// , C +a1 (a2,a3,a4)+(b1,b2)
if(sumC+a1 == a2+a3+a4+b1+b2){ // , b3 b4 ,
// ,b3 b4
if(b3 > b4)
result = " 7 ";
else
result = " 8 ";
}
else if(sumC+a1 < a2+a3+a4+b1+b2){ // , a1,b1,b2
// ,b1 b2
if(b1 == b2)
result = " 1 ";
else if(b1 > b2)
result = " 5 ";
else
result = " 6 ";
}
else{ // , a2,a3,a4
// ,a2 a3
if(a2 == a3)
result = " 4 ";
else if(a2 > a3)
result = " 3 ";
else
result = " 2 ";
}
}
return result;
}
}