原題:有十二個乒乓球形狀、大小相同,其中只有一個重量與其它十一個不同,現在要求用一部沒有砝碼的天秤稱三次,將那個重量異常的球找出來,並且知道它比其它十一個球較重還是較輕。
下面是程序的實現,,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;
}
}