读书人

十二个雷同样子球有一个球重量不同

发布时间: 2012-12-22 12:05:06 作者: rapoo

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

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

?

下面是程序的实现,,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);elsebreak;i++;}System.out.println(getDiffent(arr));}}public static String getDiffent(int[] arr){//分三组,A,B,Cint 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个球 重";elseresult = "第10个球 重";}//如果C组三个比AB组的轻,则说明不同的球在C组三个当中,且为较轻else if(sum3C < sum3AB){//拿c1,c2比较,如果相同,则不同的球为c3,第三称if(c1 == c2)result = "第11个球 轻";else if(c1 > c2)result = "第10个球 轻";elseresult = "第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和b4if(b3 > b4)result = "第8个球 轻";elseresult = "第7个球 轻";}else if(sumC+a1 > a2+a3+a4+b1+b2){//如果前者重,则不同球在a1,b1,b2当中//第三称,b1和b2if(b1 == b2)result = "第1个球 重";else if(b1 > b2)result = "第6个球 轻";elseresult = "第5个球 轻";}else{//如果前者轻,则不同球在a2,a3,a4当中//第三称,a2和a3if(a2 == a3)result = "第4个球 重";else if(a2 > a3)result = "第2个球 重";elseresult = "第3个球 重";}}//第一称,A比B轻,如果不同球在A组则为较轻,如果在B组则为较重else{//第二称,拿C组+a1和(a2,a3,a4)+(b1,b2)比较if(sumC+a1 == a2+a3+a4+b1+b2){//如果相同,则不同球在b3和b4当中,且为较重//第三称,b3和b4if(b3 > b4)result = "第7个球 重";elseresult = "第8个球 重";}else if(sumC+a1 < a2+a3+a4+b1+b2){//如果前者轻,则不同球在a1,b1,b2当中//第三称,b1和b2if(b1 == b2)result = "第1个球 轻";else if(b1 > b2)result = "第5个球 重";elseresult = "第6个球 重";}else{//如果前者重,则不同球在a2,a3,a4当中//第三称,a2和a3if(a2 == a3)result = "第4个球 轻";else if(a2 > a3)result = "第3个球 轻";elseresult = "第2个球 轻";}}return result;}}

读书人网 >编程

热点推荐