十二個相同樣子球,有一個球重量不同,稱三次確定球和輕重

原題:有十二個乒乓球形狀、大小相同,其中只有一個重量與其它十一個不同,現在要求用一部沒有砝碼的天秤稱三次,將那個重量異常的球找出來,並且知道它比其它十一個球較重還是較輕。

 

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

	}


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章