其他分享
首页 > 其他分享> > 问题:现有12个外形相同的小球,只有其中一个小球质量不同(不能确定较重还是较轻),请用天平找出是哪个小球不同,而且还要找出究竟是轻是重?条件:只能称三次

问题:现有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