12個の同じ形のボールがあって、1つのボールの重量が異なって、3回ボールと軽重を確定します

4133 ワード

原題:12個の卓球の形状、大きさは同じで、その中に1つの重量だけが他の11個と異なっていて、今1部の分銅のない天秤で3回量って、その重量の異常なボールを探し出して、しかもそれが他の11個のボールより重いか軽いかを知っています.
 
次はプログラムの実装で、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;

	}


}