十二个相同样子球,有一个球重量不同,称三次确定球和轻重

原题:有十二个乒乓球形状、大小相同,其中只有一个重量与其它十一个不同,现在要求用一部没有砝码的天秤称三次,将那个重量异常的球找出来,并且知道它比其它十一个球较重还是较轻。

 

下面是程序的实现,,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;

	}


}

你可能感兴趣的:(算法题)