问题:现有12个外形相同的小球,只有其中一个小球质量不同(不能确定较重还是较轻),请用天平找出是哪个小球不同,而且还要找出究竟是轻是重?条件:只能称三次
作者:互联网
FindBall
class FindBall {
public void compValue(double[] item){
double GroupA = 0, GroupB = 0,GroupC = 0;
double A123 = 0;//A组1,2,3,号球的重量
double A1B567 = 0;//A组1号球和B组5,6,7号球的重量
double B8C91011 = 0;//B组8号球和C组全部球的重量
/**
* 将小球依次分为三组分别为A,B,C
* A组(1,2,3,4)号球
* B组(5,6,7,8)号球
* C组(9,10,11)号球
*/
//对三组小球重量分别求和
for(int i = 0;i < 4;i ++){//A组
GroupA += item[i];
}
for(int i = 4;i < 8;i ++){//B组
GroupB += item[i];
}
for(int j =8;j < 11;j ++){//C组
GroupC += item[j];
}
A1B567 = item[0] + GroupB - item[7];//A组1号球和B组5,6,7号球的重量之和
B8C91011 = item[7] + GroupC;//B组8号球和C组9,10,11号球的重量之和
if( GroupA == GroupB){//情况一:A组球重量与B组球相等
for(int j = 0;j < 3;j ++){
A123 += item[j];
}
if(A123 == GroupC){//则异常球为12号球
if(item[0] > item[11])
System.out.println("第12个球是异常球,light!");
else
System.out.println("第12个球是异常球,heavy!");
}else if(A123 > GroupC){//则异常球在9 10 11中且异常球较轻
if(item[8] == item[10])
System.out.println("第10个球是异常球,light!");
else if(item[8] > item[10])
System.out.println("第11个球是异常球,light!");
else
System.out.println("第9个球是异常球,light!");
}else {//则异常球在9 10 11中且异常球较重
if(item[8] == item[10])
System.out.println("第10个球是异常球,heavy!");
else if(item[8] > item[10])
System.out.println("第9个球是异常球,heavy!");
else
System.out.println("第11个球是异常球,heavy");
}
}else if(GroupA > GroupB){//情况二:A组球重量大于B组球 则异常球在1-8号球中
if(A1B567 == B8C91011){//若1,5,6,7号球等于8 ,9,10,11号球 则异常球在2,3,4号球中
if(item[1] == item[3])
System.out.println("第3个球是异常球,heavy!");
else if(item[1] > item[3])
System.out.println("第2个球是异常球,heavy!");
else
System.out.println("第4个球是异常球,heavy!");
}else if(A1B567 > B8C91011){
/**
* 异常球为1号或8号球
* 球1,2,3,4> 5,6,7,8则分为二种情况
* 一:重球存在于1,2,3,4中
* 二:轻球存在于5,6,7,8中
* 又因球1,5,6,7>8,9,10,11且因9,10,11为正常球所以8号球如果异常只能是轻球
* 如果8号球为正常球则只可能是1号为异常重球
*/
if(item[0] > item[11])
System.out.println("第1个球是异常球,heavy!");
else
System.out.println("第8个球是异常球,light!");
}else{//因A组球大于B组则 8号球为正常球 异常球存在于5,6 7号球中
if(item[4] == item[6])
System.out.println("第6个球是异常球,light!");
else if(item[4] > item[6])
System.out.println("第7个球是异常球,light!");
else
System.out.println("第5个球是异常球,light!");
}
}
else{
/**
* 情况三:A组球重量小于B组球 则异常球在1-8号球中
*
*/
if(A1B567 == B8C91011){
if(item[1] == item[3])
System.out.println("第3个球是异常球,light!");
else if(item[1] > item[3])
System.out.println("第4个球是异常球,light!");
else
System.out.println("第2个球是异常球,light!");
}else if(A1B567 > B8C91011){
/**
* 球1,2,3,4<5,6,7,8则分为二种情况
* 一:轻球存在于1,2,3,4中
* 二:重球存在于5,6,7,8中
* 因9,10,11为正常球且因1,5,6,7>8,9,10,11所以8号球不可能为重球
* 所以异常球存在于5,6,7中且为重球
*/
if(item[4] == item[6])
System.out.println("第6个球是异常球,heavy!");
else if(item[4] > item[6])
System.out.println("第5个球是异常球,heavy!");
else
System.out.println("第7个球是异常球,heavy!");
}else{
if(item[0] < item[11])
System.out.println("第1个球是异常球,light!");
else
System.out.println("第8个球是异常球,heavy!");
}
}
}
}
产生随即球
public class Produce {
public double[] produce(double ball[]) {
Random fuk = new Random();
int n = fuk.nextInt(100) % 12;
double strat = fuk.nextDouble() * 100;//产生第一个随机数,并赋值给12个小球。
strat = (double) Math.round(strat * 100) / 100;//取小数点后两位。
for (int i = 0; i < 12; i++) {
ball[i] = strat;
}
double x = fuk.nextDouble() * 100;//随机产生一个0-11的数值,将其ball[n]的值赋值为一个随机数。
ball[n] = (double) Math.round(x * 100) / 100;
if (n-1 >= 0){ //验证新产生的小球重量不与其他小球重量相同。如相同重新产生随机数赋值。
if (ball[n-1] == ball[n]){
double p = fuk.nextDouble() * 100;
ball[n] = (double) Math.round(p * 100) / 100;
}
}
else if (ball[n+1] == ball [n]){
double p = fuk.nextDouble() * 100;
ball[n] = (double) Math.round(p * 100) / 100;
}
return ball;
}
}
FindBallTest
public class FindBallTest {
public static void main(String[] args) {
double ball[] = new double [12];
Produce p1=new Produce();
p1.produce(ball);
FindBall tb = new FindBall();
for (int i = 0 ;i < 12; i++){
System.out.println((i+1)+"号球"+ball[i]+" ");}
System.out.println();//输出随机产生的小球重量
tb.compValue(ball);
}
}
标签:找出,12,号球,小球,System,else,item,println,out 来源: https://blog.csdn.net/qq_34267071/article/details/120812375