zoukankan      html  css  js  c++  java
  • 前端智勇大冲关第四关12小球称重问题

    有关前端智勇大冲关已给出了前三道题的解答,开始给出第四道题的解答,可能会有些出入,仅供大家的参考与学习。如果有误,请大家帮忙更正,谢谢。

    balls[]   定义长度为12的数组
    status   定义小球的轻重状态   -1代表轻   0代表正常  1代表重

    随机生成-1或1两种状态的一种,并随机放在balls数组中,并记录这个坏球在数组中的位置

    下面是我给出了一个简单的模拟示例。

    简单模拟测试:

    假如   mStatusType = -1;   坏球为轻

             mBallPos = 3;  坏球的位置放在第四个

             leftBalls = [0,1,2,3];   记录位置,分别是1,2,3,4这几个球

             rightBalls = [4,5,6,7];  记录位置,分别是5,6,7,8这几个球

    调用   resultMsg(leftBalls,rightBalls);

        var balls =new Array();  // 存储小球
        var status = [-1,1];     // -1表示轻   1表示重
        var mStatusNum = parseInt(Math.random()*2);  // 随机生成0或1
        var mBallPos = parseInt(Math.random()*12);   // 坏球的位置
        var mStatusType = status[mStatusNum];   // 坏球轻重信息
        var leftBalls = new Array();  // 称左边包含的球
        var rightBalls = new Array(); // 称右边包含的球
                
        /**
         *函数initBalls初始化这组12个小球
         */
        function initBalls(){
            for(var i=0;i<12;i++){
                if(i===mBallPos){
                    balls[i]=mStatusType;
                }
                else{
                    balls[i]=0;
                }
            }
        }
                
        /**
         *函数isBall判断是否含有坏球,有返回true,无反回false
         *参数arr指数组,指数组,称的一边包含的球
         *参数mpos指坏球的位置
         */
        function isBall(arr,mpos){   
            for(var i=0,j=arr.length;i<j;i++){
                if(arr[i]===mpos){
                    return true;
                }
            }
            return false;
        }
                
        /**
         * 函数resultMsg显示结果,返回string类型提示轻重信息
         * 参数leftBalls指数组,代表称中左边球
         * 参数rightBalls指数组,代表称中右边球
         */
        function resultMsg(leftBalls,rightBalls){
            if(leftBalls.length>rightBalls.length){  //那边球多那边重
                console.log("左边比右边重");
            }
            else if(leftBalls.length<rightBalls.length){
                console.log("左边比右边轻");
            }
            else{    //那边含有坏球(根据位置判断),并根据-1或1判断或轻或重
                if(!isBall(leftBalls,mBallPos)&&!isBall(rightBalls,mBallPos)){
                    console.log("左右两边一样重");
                }
                else if(isBall(leftBalls,mBallPos)){
                    if(mStatusType===-1){
                        console.log("左边比右边轻")
                    }
                    else{
                        console.log("左边比右边重");
                    }
                }
                else if(isBall(rightBalls,mBallPos)){
                    if(mStatusType===-1){
                        console.log("左边比右边重")
                    }
                    else{
                        console.log("左边比右边轻");
                    }
                }
            }
        }


    关于逆推请参考
    有12个小球,有一个质量和其它十一个不一样,不知道是重还是轻。用一个天秤称三次,把这个质量不同的球给区别出来(来源:12小球称重问题)
    将12个小球编号 1~C
    1 对比 1234 & 5678
      1.1 1234 = 5678,则坏球在9ABC中,第二次称 1239 & 56AB
        1.1.1 1239 = 56AB,则坏球是C
        1.1.2 1239 > 56AB,则坏球在9AB中,且 9 > AB 第三次称 A & B
          1.1.2.1 A = B, 坏球是9, 9偏重
          1.1.2.2 A > B, 坏球是B, B偏轻
          1.1.2.3 A < B, 坏球是A, A偏轻
        1.1.3 1239 < 56AB,则坏球在9AB中, 且 9 < AB 第三次称 A & B
          1.1.3.1 A = B, 坏球是9, 9偏轻
          1.1.3.2 A > B, 坏球是A, A偏重
          1.1.3.3 A < B, 坏球是B, B偏重
      1.2 1234 > 5678, 则坏球在1~8中,且要么1234中有偏重的坏球,要么5678中有偏轻的坏球,称 2345 & ABC1
        1.2.1 2345 = ABC1,则坏球在678中,第三次称 6 & 7
          1.2.1.1 6 = 7, 则坏球是8,8偏轻
          1.2.1.2 6 > 7,则坏球是7, 7偏轻
          1.2.1.3 6 < 7, 则坏球是6, 6偏轻
        1.2.2 2345 > ABC1,则坏球在234中,因为如果234是正常,说明 5 > 1,显然1.2 1234 > 5678 不成立,第三次称 2 & 3
          1.2.2.1 2 = 3, 4是坏球,4偏重
          1.2.2.2 2 > 3, 2是坏球,2偏重
          1.2.2.3 2 < 3, 3是坏球,3偏重
        1.2.3 2345 < ABC1,说明坏球在51中,因为如果51正常,说明 234 < ABC ,显然 1.2 1234 > 5678不成立,克制 5 < 1,第三次称1 & A
          1.2.3.1 1 = A,坏球是5,5偏轻
          1.2.3.2 1 > A,坏球是1,1偏重
          1.2.3.3 1 < A,此情况不存在
      1.3 1234 < 5678,判断方法同1.2

  • 相关阅读:
    “耐撕”团队 2016.3.25 站立会议
    “耐撕”团队 2016.03.24 站立会议
    “耐撕”团队 2016.3.22 站立会议
    windows环境下的git安装及使用
    词频统计(三)
    第二周作业
    Unity之GUI控件
    Lua的协同程序(coroutine)
    Lua与C++的交互
    Lua的元方法__newindex元方法
  • 原文地址:https://www.cnblogs.com/kuikui/p/2688045.html
Copyright © 2011-2022 走看看