首页 > 试题广场 >

双色球机选一注

[编程题]双色球机选一注
  • 热度指数:6692 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
双色球由33个红球和16个蓝球组成,1注双色球包括6个不重复的红球和1个蓝球。
请阅读给出的页面和代码,完成 randomFn 函数,实现“随机一注”功能,要求如下:
函数返回:
  1.以字符串形式输出“随机一注”结果,选中的红蓝球用"|"隔开,红球在前,号码间用半角逗号隔开,如"06,10,13,18,23,27|05"
  2.红球和蓝球号码排列顺序 需与页面展示的顺序对应
页面交互:
  1.将选中的红球和蓝球(页面中对应DOM元素)用class="active"高亮
  2.将选中的球按号码从小到大排列,移至所属组的前方,结果如示意图所示
  3.每次执行 randomFn 函数,输出符合要求且不完全重复

注意:
1、请使用原生JavaScript操作DOM元素,不要增加、删除DOM元素或修改css
2、请使用ES5语法
3、答题时不要使用第三方插件
4、运行浏览器为chrome浏览器
5
// 可能涉及的点

// element.className
// element.classList
// element.classList.add
// element.classList.remove
// element.getAttribute
// element.setAttribute
// element.innerHTML
// element.insertBefore
// element.parentNode

// document.querySelector
// document.querySelectorAll
// document.getElementsByTagName
// document.getElementsByClassName

// Array.sort
// Array.push
// Array.join
// Array.indexOf
// Array.forEach
// Array.map

// Math.random
// Math.floor

// Number.toString()

randomFn();

function randomFn() {
    var oRedWrap = document.querySelector('.red .balls-wp')
    var oRedp = oRedWrap.getElementsByTagName('b')
    var oBlueWrap = document.querySelector('.blue .balls-wp')
    var oBluep = oBlueWrap.getElementsByTagName('b')
    var redText = selectBoll(oRedWrap,oRedp,6,33)
    var blueText = selectBoll(oBlueWrap,oBluep,1,16)
    console.log(redText+'|'+blueText)
    return redText+'|'+blueText
}

function selectBoll(oWrap,oP,length,allLength){
    var boll = []
    for(var i=0;i<length;i++){
        var index = Math.floor(Math.random() * (allLength - i))
        boll.push({
            node:oP[index],
            value:oP[index].innerHTML
        })
        oWrap.removeChild(oP[index])
        
    }
    boll.sort((a,b) => {
        return a.value - b.value
    }).map(item => {
        item.node.classList.add('active')
    })
    for(var i = length - 1;i>=0;i--){
        oWrap.insertBefore(boll[i].node,oWrap.firstChild);
    }
    return boll.map(item=>{
        return item.value
    }).join(',')
}
发表于 2021-06-07 15:45:36 回复(0)
randomFn();

function randomFn() {
        // 对红色球操作
        var balls_red = document.querySelector('.balls.red')
        var balls_red_wp = balls_red.querySelector('.balls-wp')
        var red_balls = Array.from(balls_red.querySelectorAll('b'))
  
        select(red_balls,6)
        // 对蓝色球操作
        var balls_blue = document.querySelector('.balls.blue')
        var balls_blue_wp = balls_blue.querySelector('.balls-wp')
        var blue_balls = Array.from(balls_blue.querySelectorAll('b'))
        
        select(blue_balls,1)

        var red_select = red_balls.slice(0,6)
        var blue_select = blue_balls[0]
        // 排序
        red_select.sort(function(a,b){
            return parseInt(a.innerHTML) - parseInt(b.innerHTML)
        })
        // 倒序插入
        for(let i=red_select.length - 1;i>=0;i--){
            let item = red_select[i]
            item.classList.add('active')
            balls_red_wp.insertBefore(item,balls_red_wp.childNodes[0])
        }

        blue_select.classList.add('active')
        balls_blue_wp.insertBefore(blue_select,balls_blue_wp.childNodes[0])

        var result = red_select.map(function(item){return item.innerHTML}).join(',') + '|'  + blue_select.innerHTML
        console.log(result)
        return result
    }
    // 洗牌算法
    // 筛选出n个球
    function select(arr, num) {
        var start = 0
        for (var i = 0; i < num; i++) {
            var index = start + Math.round(Math.random() * (arr.length - start - 1))
            var curBall = arr[index]
            // 交换到前面
            swap(arr,start,index)
            start++
        }
    }

    function swap(arr, i, j) {
        var temp = arr[i]
        arr[i] = arr[j]
        arr[j] = temp
    }

发表于 2022-05-10 19:09:28 回复(1)
function randomFn() {
let redballs = document.querySelectorAll('.red .balls-wp b');
let blueballs = document.querySelectorAll('.blue .balls-wp b');
let reddiv = document.querySelector(".red .balls-wp")
let bluediv = document.querySelector(".blue .balls-wp")

let active = document.querySelectorAll('.active')
active.forEach(item => {
    item.classList.remove('active')
})

console.log(reddiv,bluediv)

let red=[]
let redB=[]

while(red.length<6){
    let i = Math.floor(Math.random() * 33)+1;
    if(red.indexOf(i)==-1){
        red.push(i)
        let redb = redballs[i -1]
        // 删除active类
       
        redb.classList.add('active')
        redB.push(redb)

    }
}
let blue=Math.floor(Math.random() * 16)+1;
let blueB=blueballs[blue -1]

blueB.classList.add('active')

redB.sort((a,b)=>a.innerHTML - b.innerHTML)
for(let i=0;i<6;i++){
  reddiv.insertBefore(redB[i],redballs[0])
}
bluediv.insertBefore(blueB,blueballs[0])

console.log(redB,blueB)
return redB.map(item=>item.innerHTML).reverse().join(',')+'|'+blueB.innerHTML
   
}
发表于 2023-09-07 19:22:20 回复(0)
function randomFn() {
let redB = document.querySelectorAll(".balls-wp b")
 let redBalls = document.querySelector(".balls-wp")
 let blueBalls =document.querySelector(".blue").children[1]
 let redTimeArr = []
 let redMoveArr = []
 let blueTimeArr = []
 let blueMoveArr = []
  let timer = setInterval(()=>{
    let random =Math.ceil(Math.random()*33).toString()
     if(random<10) {
        random = "0"+random
     }
     if(redTimeArr.indexOf(random) == -1) {
        redTimeArr.push(random)
        if(redTimeArr.length>=6){
            clearInterval(timer)
            redB.forEach((item,i) =>{
                if(i<33) {
                 if(redTimeArr.indexOf(item.innerHTML) !== -1) {
                  redMoveArr.push(item)
                  redBalls.removeChild(item)
                }
                }
            })
             
            redMoveArr.reverse().forEach((item)=>{
                redBalls.insertBefore(item,redBalls.children[0])
                redBalls.children[0].classList.add("active")
            })
            
        }
     
    }
    
 },0)
let random1 = Math.ceil(Math.random()*16).toString()
if(random1<10) {
        random1 = "0"+random1
 }
console.log(blueBalls)
redB.forEach((item,i) =>{
                if(i>=33) {
                   if(random1.indexOf(item.innerHTML) !== -1) {
                  console.log(item)
                  blueBalls.insertBefore(item,blueBalls.children[0])
                  blueBalls.children[0].classList.add("active")
                }
                }
            })
}
发表于 2023-04-15 21:31:45 回复(1)
哇,吐了,前几次操作dom超时,后面用了个includes,一直以为是我代码的问题,但本地好好的,服了,采用修改dom内的文案,前六个红色固定加上类名,前一个蓝色球固定加上类名,接下来就是后面dom内的文案渲染,其实两个可以合并成一个函数,但是考虑到会多出一些多余的操作就没合并(生怕超时,吐了)
function randomFn(){
    let blueList = document.querySelectorAll(".blue .balls-wp b"),
        redList = document.querySelectorAll(".red .balls-wp b"),
        redRandomList = [],
        str = "";
    // 使用while循环获取六个对应的数值
    while (redRandomList.length < 6) {
      let redRandom = Math.floor(Math.random() * redList.length);
      // 判断是否重复,不重复就添加
      if (redRandomList.indexOf(redList[redRandom].innerText) === -1) {
        // 添加当前节点内容
        redRandomList.push(redList[redRandom].innerText);
      }
    }
    // 获取到随机元素后对数组进行排序
    redRandomList.sort((a, b) => {
      return a - b;
    });

    let init = 0
    for(let i = 0 ; i < redList.length + 6;i++){
        if (i < 6) {
            // 为前6个dom添加类名
            redList[i].setAttribute("class", "active");
            redList[i].innerText = redRandomList[i];
        } else {
            // 手动渲染dom内的文本,i-5是代表从1开始渲染文案
            let text = (i - 5 < 10 ? "0" : "") + (i - 5);
            // 如果在随机到的文案数组存在当前文案,则跳过这次循环
            if(redRandomList.indexOf(text) !== -1) {
                init++
                continue
            }
            redList[i - init].innerText = text;
        }
    }

    str = redRandomList.join(',') + "|";
    // 蓝色球随机位置的文案
    let blueRandom = blueList[Math.floor(Math.random() * blueList.length)].innerText, blueInit = 0
    blueList[0].innerText = blueRandom
    blueList[0].setAttribute('class','active')
    for(let i = 1;i <= blueList.length;i++ ){
        let text = (i < 10 ? "0" : "") + i
        // 如果需要渲染的文案与蓝色球随机文案相同,则跳过这次循环
        if(text === blueRandom) {
            blueInit++
            continue
        }
        blueList[i - blueInit].innerText = text
    }
    return str + blueRandom;
}


发表于 2022-07-13 11:53:08 回复(1)
randomFn()
function randomFn() {
  let res = randomColor(document.querySelector('.red>.balls-wp'), 6)
  res =
    res +
    '|' +
    randomColor(document.querySelector('.blue>.balls-wp'), 1)
  //   console.log(res)
  return res
}
function randomColor(wp, cnt) {
  if (cnt < 0) return
  //   1 获取节点引用和列表
  let ballArr = Array.from(wp.children) //球的列表
  //   2 随机生成
  let randomArr = []
  while (randomArr.length < cnt) {
    let index = Math.floor(Math.random() * ballArr.length)
    randomArr = randomArr.concat(ballArr.splice(index, 1))
  }
  //   3 排序
  randomArr.sort((a, b) => a.innerText - b.innerText)
  //   ballArr.sort((a, b) => a.innerText - b.innerText)
  //   4 重新按顺序插入
  for (let item of randomArr) {
    item.classList.add('active')
    wp.insertBefore(item, ballArr[0])
    // wp.appendChild(item)
  }
  for (let item of ballArr) {
    item.classList.remove('active')
    // wp.appendChild(item)
  }

  return randomArr.map((item) => item.innerText).join(',')
}
提交好多次才过,总结出几个重要的注意点:
1. 修改active类时用className不给过,要用classList的add和remove方法才给过
2. 未选择的不用排序,不然时间上来不及,会超时。所以只需要对随机生成的6个排序就行了
3. 插入时不要用appendChild全部重新插入,要用insertBefore插入,不然会超时
发表于 2021-12-06 18:51:53 回复(1)

本地测试正常,无法通过

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <style>
        .main .balls {
            width: 450px;
            padding: 30px 10px 10px;
            margin-bottom: 20px;
            position: relative;
            border-radius: 4px;
        }

        .main .balls:after {
            content: '\20';
            clear: both;
            display: block;
            height: 0;
            overflow: hidden;
        }

        .main .balls span {
            position: absolute;
            left: 12px;
            top: 5px;
            font-size: 13px;
        }

        .main b {
            float: left;
            width: 30px;
            height: 30px;
            font-size: 15px;
            background: #FFF;
            border: 1px solid;
            border-radius: 50%;
            line-height: 30px;
            text-align: center;
            margin-right: 8px;
            margin-bottom: 8px;
            cursor: pointer;
        }

        .main .red .active {
            background: #f56c6c;
            color: #FFF;
        }

        .main .blue .active {
            background: #3a8ee6;
            color: #FFF;
        }

        .main .red {
            background: #feeff0;
        }

        .main .red b {
            border-color: #f56c6c;
        }

        .main .blue {
            background: #ecf8ff;
        }

        .main .blue b {
            border-color: #3a8ee6;
        }
    </style>
</head>

<body>
<!-- 填写标签 -->
<div class="main">
    <div class="balls red">
        <span>红球</span>
        <div class="balls-wp">
            <b>01</b>
            <b>02</b>
            <b>03</b>
            <b>04</b>
            <b>05</b>
            <b>06</b>
            <b>07</b>
            <b>08</b>
            <b>09</b>
            <b>10</b>
            <b>11</b>
            <b>12</b>
            <b>13</b>
            <b>14</b>
            <b>15</b>
            <b>16</b>
            <b>17</b>
            <b>18</b>
            <b>19</b>
            <b>20</b>
            <b>21</b>
            <b>22</b>
            <b>23</b>
            <b>24</b>
            <b>25</b>
            <b>26</b>
            <b>27</b>
            <b>28</b>
            <b>29</b>
            <b>30</b>
            <b>31</b>
            <b>32</b>
            <b>33</b>
        </div>
    </div>
    <div class="balls blue">
        <span>蓝球</span>
        <div class="balls-wp">
            <b>01</b>
            <b>02</b>
            <b>03</b>
            <b>04</b>
            <b>05</b>
            <b>06</b>
            <b>07</b>
            <b>08</b>
            <b>09</b>
            <b>10</b>
            <b>11</b>
            <b>12</b>
            <b>13</b>
            <b>14</b>
            <b>15</b>
            <b>16</b>
        </div>
    </div>
</div>
<script type="text/javascript">
    // 填写JavaScript
    randomFn();

    function randomFn() {
        let ballsWp = document.getElementsByClassName('balls-wp')[0];
        let map = new Map();
        for(let i = 0, e = ballsWp.firstElementChild; i < 6; ++i, e = e.nextElementSibling) {
            e.setAttribute('class', '');
        }
        while(map.size < 6) {
            let r = Math.ceil(Math.random() * 33).toString().padStart(2, '0');
            if(!map.has(r)) {
                let elem = ballsWp.firstElementChild;
                while(elem !== ballsWp.lastElementChild) {
                    if(elem.innerText === r) {
                        break;
                    }
                    elem = elem.nextElementSibling;
                }
                map.set(r, elem);
            }
        }
        let arr = Array.from(map)
        arr.sort().reverse();
        let ret = [];
        for(let a of arr) {
            // console.log(a[0]);
            a[1].setAttribute("class", 'active');
            ballsWp.insertBefore(a[1], ballsWp.firstElementChild);
            ret.unshift(a[0]);
        }
        ballsWp = document.getElementsByClassName('balls-wp')[1];
        let str = Math.ceil(Math.random()*16).toString().padStart(2, '0');
        let elem = ballsWp.firstElementChild;
        elem.setAttribute('class', '');
        while(elem !== ballsWp.lastElementChild) {
            if(elem.innerText === str) {
                break;
            }
            elem = elem.nextElementSibling;
        }
        elem.setAttribute('class', 'active');
        ballsWp.insertBefore(elem, ballsWp.firstElementChild);
        return ret.join(',') + '|' + str;
    }
</script>
</body>

</html>
发表于 2023-10-30 17:28:14 回复(0)
无厘头
发表于 2023-08-27 01:41:03 回复(0)
function getResult(arr, n) {
    const rest = [];
    let init = 0;
    // 可能是这里处理比较复杂,不是原地交换位置,而是每次重新取,导致超时,实际上这样做也是可以流畅运行的
    while (init < n) {
        const i = Math.round(Math.random() * (arr.length - 1));
        rest.push(arr[i])
        arr = arr.filter((v, idx) => {
            return idx !== i;
        });
        init++;
    }
    return [rest.sort((a, b) => Number(a) - Number(b)), 
        arr.sort((a, b) => Number(a) - Number(b))];
}

function randomFn() {
    var redData = Array.from(document.querySelectorAll('.balls.red .balls-wp b')).map(v => v.innerText);
    var red = getResult(redData, 6);
    document.querySelector('.balls.red .balls-wp').innerHTML = [
    ...red[0].map(v => `<b class="active">${v}</b>`),
    ...red[1].map(v => `<b>${v}</b>`)
    ].join('');
    var blueData = Array.from(document.querySelectorAll('.balls.blue .balls-wp b')).map(v => v.innerText);
    var blue = getResult(blueData, 1);
    document.querySelector('.balls.blue .balls-wp').innerHTML = [
    ...blue[0].map(v => `<b class="active">${v}</b>`),
    ...blue[1].map(v => `<b>${v}</b>`)
    ].join('');
    return `${red[0].join(',')}|${blue[0]}`;
}

发表于 2023-07-26 22:43:11 回复(0)
目前评论区和题解方法全部跑了一遍,通过三个以上的都多跑了好几遍,全军覆没,感觉是服务器性能的锅。
发表于 2023-05-19 23:34:45 回复(0)
 randomFn(6,1);
 //形参表示红的数量与蓝色的数量 提高复用性
 function randomFn(red,bule) {
         // 对红色球操作
         var balls_red = document.querySelector('.balls.red')
         var balls_red_wp = balls_red.querySelector('.balls-wp')
         var red_balls = Array.from(balls_red.querySelectorAll('b'))
   
         select(red_balls,10)
         // 对蓝色球操作
         var balls_blue = document.querySelector('.balls.blue')
         var balls_blue_wp = balls_blue.querySelector('.balls-wp')
         var blue_balls = Array.from(balls_blue.querySelectorAll('b'))
         
         select(blue_balls,5)
 
         var red_select = red_balls.slice(0,red)
         var blue_select = blue_balls.slice(0,bule)
        //  console.log(red_select,blue_select);
         // 排序
         red_select.sort(function(a,b){
             return parseInt(a.innerHTML) - parseInt(b.innerHTML)
         })
         // 倒序插入
         for(let i=red_select.length - 1;i>=0;i--){
             let item = red_select[i]
             item.classList.add('active')
             //重点插入
             balls_red_wp.insertBefore(item,balls_red_wp.childNodes[0])
             console.log(balls_red_wp.childNodes[0]);
         }
 
         blue_select.sort(function(a,b){
             return parseInt(a.innerHTML) - parseInt(b.innerHTML)
         })
         for(let i=blue_select.length - 1;i>=0;i--){
             let item = blue_select[i]
             item.classList.add('active')
             balls_blue_wp.insertBefore(item,balls_blue_wp.childNodes[0])
        }
     }
     // 洗牌算法
     // 筛选出n个球
     function select(arr, num) {
         var start = 0
         for (var i = 0; i < num; i++) {
              // 随机数
             var index = start + Math.round(Math.random() * (arr.length - start - 2))
             // 交换到前面
             var temp = arr[start]
             arr[start] = arr[index]
             arr[index] = temp
             start++
          
         }
     }
 
发表于 2023-05-18 13:08:43 回复(0)
请问就没有一个人是通过了吗,我拿你们所有人的代码都跑了一遍,怎么全超时啊?
反正我也超时,那我也发
randomFn();

function randomFn() {

    let setRedRandom = new Set();
    let i = 0;
    while(i < 6) {
        let num = Math.floor(Math.random() * 32 + 1);
        if(!setRedRandom.has(num)) {
            setRedRandom.add(num);
            i++;
        }
    }
    let activeRedArr = Array.from(setRedRandom).map( q => {
        return ('0' + q).slice(-2);
    }).sort((a,b) => {
        return a - b;
    });
    let redStr = activeRedArr.join(',');
    let activeBlueArr = new Array(('0' + Math.floor(Math.random() * 15 + 1)).slice(-2));
    let blueStr = activeBlueArr.join('');
    let randomStr = redStr + '|' + blueStr;   //最终返回值
    console.log(randomStr)
    
    let redAll = [];
    let blueAll = [];
    for(let i = 1;i <= 33;i++) {
        let num = ('0' + i).slice(-2);
        redAll.push(num);
    }
     for(let i = 1;i <= 16;i++) {
        let num = ('0' + i).slice(-2);
        blueAll.push(num);
    }
    redAll = activeRedArr.concat(redAll.filter( v => activeRedArr.indexOf(v) === -1));
    blueAll = activeBlueArr.concat(blueAll.filter( v => activeBlueArr.indexOf(v) === -1));
    
    let ballsRed = document.querySelectorAll('div.red div.balls-wp b');
    let ballsBlue = document.querySelectorAll('div.blue div.balls-wp b');
    console.log(ballsRed,'ballsred')
    console.log(ballsBlue,'ballsblue')
    
    for(let i = 0;i < 33;i++) {
        ballsRed[i].innerHTML = redAll[i];
        if(i < 6) ballsRed[i].classList.add('active');
        if(i < 16) {
            ballsBlue[i].innerHTML = blueAll[i];
            ballsBlue[0].classList.add('active');
        }
    }
    
    
 
    return randomStr;
    
    
}


















发表于 2023-03-07 22:21:32 回复(0)
function randomFn() {
    
    let red_arr = Array.from( new Array(33) ).map( (item, index) => {
        return (index + 1 > 9 ? '':'0') + (index + 1)
    })
    
    let blue_arr =  Array.from( new Array(16) ).map( (item, index) => {
       return (index + 1 > 9 ? '':'0') + (index + 1)
    })
    
    let red_res =  Array.from( new Array(6) ).map( (item, index) => {
        return red_arr.splice(Math.random()*(33-index) , 1)[0]
    }).sort((a, b) => a - b  )
    
    let blue_res =  blue_arr.splice(Math.random()*15 , 1)
    
    let redball = document.querySelectorAll('.red b')
    let blueball = document.querySelectorAll('.blue b')
    
    redball.forEach( (item, index) => {
         if ( index < 6 ) {
             item.classList.add('active')
             item.innerHTML = red_res[index]
         }else{
             item.innerHTML = red_arr[index - 6]
         }
     })
    
    blueball.forEach( (item, index) => {
         if ( index < 1 ) {
             item.classList.add('active')
             item.innerHTML = blue_res[index]
         }else{
             item.innerHTML = blue_arr[index - 1]
         }
     })
    return red_res.join(',')+'|'+blue_res[0]
}

发表于 2022-11-10 17:22:33 回复(0)
完美通关!!!
randomFn();

function randomFn() {
    // 随机产生6个红球
    var activeRed = [];
    while (activeRed.length < 6) {
        var num1 = Math.floor(33 * Math.random() + 1);
        if (num1 <= 9 && activeRed.indexOf("0" + num1) == -1) {
            activeRed.push("0" + num1);
        };
        if (num1 > 9 && activeRed.indexOf("" + num1) == -1) {
            activeRed.push("" + num1);
        };
    };
    activeRed.sort();
    // 处理剩余红球
    var otherRed = [];
    for (var i = 1; i <= 33; i++) {
        if (i <= 9 && activeRed.indexOf("0" + i) == -1) {
            otherRed.push("0" + i);
        };
        if (i > 9 && activeRed.indexOf("" + i) == -1) {
            otherRed.push("" + i);
        };
    }

    // 随机产生1个蓝球
    var num2 = Math.floor(16 * Math.random() + 1);
    var activeBlue = num2 > 9 ? "" + num2 : "0" + num2;
    // 处理剩余蓝球
    var otherBlue = [];
    for (var i = 1; i <= 16; i++) {
        if ((i > 9 ? "" + i : "0" + i) != activeBlue) {
            otherBlue.push(i > 9 ? "" + i : "0" + i);
        }
    }

    var red = document.getElementsByClassName("balls-wp")[0].children;
    var blue = document.getElementsByClassName("balls-wp")[1].children;
    // 渲染红球
    for (var m = 0; m < 33; m++) {
        if (m < 6) {
            red[m].innerText = activeRed[m];
            red[m].classList.add("active");
        } else {
            red[m].innerText = otherRed[m - 6];
        }
    }
    // 渲染蓝球
    for (var n = 0; n < 16; n++) {
        if (n == 0) {
            blue[0].innerText = activeBlue;
            blue[0].classList.add("active");
        } else {
            blue[n].innerText = otherBlue[n - 1];
        }
    }

    return activeRed.join(",") + "|" + activeBlue;
}


发表于 2022-10-14 21:41:09 回复(1)
randomFn()
function randomFn() {
      //
      const redBalls = document.querySelectorAll(".balls-wp")[0].children,
        blueBalls = document.querySelectorAll(".balls-wp")[1].children,
        redP = document.querySelectorAll(".balls-wp")[0],
        blueP = document.querySelectorAll(".balls-wp")[1];
      console.log(redP);
      [].forEach.call(redBalls,((item)=>{
        item.classList.remove("active");
      }));
      [].forEach.call(blueBalls,((item)=>{
        item.classList.remove("active");
      }))
      let red = _arrRandom(6, 33);
      let blue = _arrRandom(1, 16);
      const ired = red.sort((a, b) => a - b);
      red = red.map((item, index) => {
        redBalls[item - 1].classList.add("active");
        return {
          i: item,
          node: redBalls[item - 1],
        };
      });
      red.sort((b, a) => a.i - b.i);
      blue = blue.map((item, index) => {
        blueBalls[item - 1].classList.add("active");
        return {
          i: item,
          node: blueBalls[item - 1],
        };
      });
      console.log(blue)
      red.forEach((item, index) => {
        redP.insertBefore(item.node, redBalls[0]);
      });
      blueP.insertBefore(blue[0].node, blueBalls[0]);
      return `${ired.join()}|${blue[0].i}`;
      //   console.log(red)
    }
    function _arrRandom(length, n) {
      let arr = [];
      while (arr.length < length) {
        let i = Math.floor(Math.random() * n + 1);
        if (!arr.includes(i)) {
          arr.push(i);
        }
      }
      return arr;
    }

//本地运行不出错,线上只能通过3个用例,加上了它给的测试函数结果会出错,求大佬看看

发表于 2022-10-03 15:07:58 回复(0)
randomFn();

      function randomFn() {
        // 随机数生成函数
        var randomNum = (min, max) => {
          return Math.floor(Math.random() * (max - min)) + min;
        };
        // 运行前清除所有的高亮元素
        document.querySelectorAll("b").forEach((item) => {
          item.removeAttribute("class");
        });
        // 所有红球
        var redBalls = document.querySelectorAll(".red .balls-wp b");
        // 随机红球索引
        var tempRedArr = [];

        // 生成6个不重复的且0-30的随机数
        for (var index = 0; index < 6; index++) {
          let tempNum = randomNum(0, 30);
          if (!tempRedArr.includes(tempNum)) {
            tempRedArr.push(tempNum);
          } else {
            index--;
          }
        }
        // 直接把索引排好序列
        tempRedArr.sort((a, b) => a - b);
        // 把对应index下的红球高亮
        tempRedArr.forEach((item) => (redBalls[item].className = "active"));
        // 红球排序
        redBalls.forEach((item, index) => {
          if (redBalls[index].className === "active") {
            document
              .querySelector(".red .balls-wp")
              .insertBefore(redBalls[index], redBalls[0]);
          }
        });
        // 篮球同理。蓝色因为只有一个
        var blueBalls = document.querySelectorAll(".blue .balls-wp b");
        // 篮球随即索引
        var blueIndex = randomNum(0, 15);
        blueBalls.forEach((item, index) => {
          if (index === blueIndex) {
            item.className = "active";
            document
              .querySelector(".blue .balls-wp")
              .insertBefore(item, blueBalls[0]);
          }
        });

        // 返回指定格式
        var strRed = tempRedArr
          .map((item) => {
            if (`${item + 1}`.length < 2) {
              return (item = `0${item + 1}`);
            }
            return item + 1;
          })
          .join(",");
        var strBlue = blueBalls[blueIndex].innerHTML;
        return `${strRed}|${strBlue}`;
      }

发表于 2022-08-22 17:48:26 回复(0)
  6/8 组用例通过 应该是哪不太符合要求 但是能玩
  function randomFn() {
            //定义一个数组 用于存放红色球数字
            let redArr = []
            //向数字添加6个随机数
            for (let i = 0; redArr.length < 6; i++) {
                let num = Math.floor(Math.random() * 33) + 1
                if (redArr.indexOf(num) == -1) {
                    redArr.push(num)
                }
            }
            //判断数组中小于10的数添加0
            for (let i = 0; i < redArr.length; i++) {
                redArr[i] = redArr[i] < 10 ? '0' + redArr[i] : redArr[i].toString()
            }
            //数组排序
            redArr.sort((a, b) => {
                return a - b
            })
            //定义一个数组 用于存放蓝色球随机数
            let blueArr = []
            //向数组添加一个数字
            blueArr.push(Math.floor(Math.random() * 16) + 1)
            //判断数组中小于10的数添加0
            for (let j = 0; j < blueArr.length; j++) {
                blueArr[j] = blueArr[j] < 10 ? '0' + blueArr[j] : blueArr[j].toString()
            }
            //获取节点
            var red = document.getElementsByClassName('balls red')
            var blue = document.getElementsByClassName('balls blue')
            var b1 = document.getElementsByClassName('balls-wp')[0]
            var rb = b1.querySelectorAll('b')
            var b2 = document.getElementsByClassName('balls-wp')[1]
            var bb = b2.querySelectorAll('b')
            //定义两个数组,一个放高亮球,一个放没高亮的球
            let arr = []
            let arr2 = []
            for (let i = 0; i < rb.length; i++) {
                if (redArr.indexOf(rb[i].innerHTML) != -1) {
                    rb[i].classList.add("active")
                    arr.push(rb[i])
                    b1.removeChild(rb[i]);
                } else {
                    arr2.push(rb[i])
                    b1.removeChild(rb[i]);
                }
            }
            //先把高亮球插入
            for (let i = 0; i < arr.length; i++) {
                b1.appendChild(arr[i])
            }
            //再把没高亮球插入
            for (let i = 0; i < arr2.length; i++) {
                b1.appendChild(arr2[i])
            }
            //篮球跟上面一样
            let arr1 = []
            let arr3 = []
            for (let i = 0; i < bb.length; i++) {
                if (blueArr.indexOf(bb[i].innerHTML) != -1) {
                    bb[i].classList.add("active")
                    arr1.push(bb[i])
                    b2.removeChild(bb[i]);
                } else {
                    arr3.push(bb[i])
                    b2.removeChild(bb[i]);
                }
            }
            for (let i = 0; i < arr1.length; i++) {
                b2.appendChild(arr1[i])
            }
            for (let i = 0; i < arr3.length; i++) {
                b2.appendChild(arr3[i])
            }
            //返回结果
            return redArr.join(',') + '|' + blueArr.join('')
        }
发表于 2022-04-21 20:05:10 回复(0)
//实在不知道为啥没通过第6组案例测试,请兄弟们帮忙看看,告知一下
randomFn();


function randomFn() {
    /*
    产生6个不重复的,范围在0-32的随机数和一个0-15的随机数
    按照顺序插入set集合中
    把set对应下标的元素添加样式插入到所有子元素之前
    */
    const set = new Set();
    while(set.size<6){
        set.add(Math.floor(Math.random()*33));
    }
    let blueIndex=Math.floor(Math.random()*16);
    const arr=Array.from(set);
    var ret=arr.sort((a,b)=>a-b).map(index=>('00'+(++index)).slice(-2)).join(',')+'|'+('00'+(blueIndex+1)).slice(-2);
    console.log(ret);
    var redBalls=document.getElementsByClassName('balls-wp')[0];
    for(let i=arr.length-1,count=0;i>=0;i--){
        let ball=redBalls.children[arr[i]+count];
        count++;
        ball.classList.add('active');
        redBalls.insertBefore(ball,redBalls.children[0]);
    }
    var blueBalls=document.getElementsByClassName('balls-wp')[1];
    var blueBall=blueBalls.children[blueIndex];
    blueBall.classList.add('active');
    blueBalls.insertBefore(blueBall,blueBalls.children[0]);
    
    
    
    
    return ret;
    
    
    
    
    
}
发表于 2022-03-26 14:21:19 回复(0)
function randomFn() {
    function cmp_desc(a, b) {
        return b.innerHTML - a.innerHTML;
    }
    function cmp_asc(a, b) {
        return a - b;
    }
    let balls_red = document.querySelector('.red .balls-wp');
    let balls_blue = document.querySelector('.blue .balls-wp');
    let selected_blue_arr = new Set(),
        selected_red_arr = new Set();
    while (selected_blue_arr.size < 1) {
        selected_blue_arr.add(Math.round(Math.random() * 15 + 1));
    }
    selected_blue_arr = Array.from(selected_blue_arr).sort(cmp_asc);
    while (selected_red_arr.size < 6) {
        selected_red_arr.add(Math.round(Math.random() * 32 + 1));
    }
    selected_red_arr = Array.from(selected_red_arr).sort(cmp_asc);
    let red_dom_arr = [],
        blue_dom_arr = [];
    function addZero(value) {
        if (value < 10)
            return '0' + value;
        return value;
    }
    function do_(selected_arr, balls, dom_arr) {
        Array.from(balls.children).forEach((item) => {
            if (selected_arr.includes(+item.innerText)) {
                item.classList.add('active');
                dom_arr.push(item);
            }
        });
        dom_arr.sort(cmp_desc);
        dom_arr.forEach(item => {
            balls.removeChild(item);
            balls.insertBefore(item, balls.firstChild);
        })
    }
    do_(selected_blue_arr, balls_blue, blue_dom_arr);
    do_(selected_red_arr, balls_red, red_dom_arr);
    let res = '';
    selected_red_arr.forEach((item, index) => {
        if (index) {
            res += `,${addZero(item)}`;
        } else {
            res += addZero(item);
        }
    })
    res += '|';
    res += addZero(selected_blue_arr[0]);
    return res;
}
randomFn();

啥玩意 堆栈溢出! 分析未果 好衰啊

发表于 2022-03-23 11:13:42 回复(0)
randomFn();
function randomFn() {
    var blue=Math.floor(Math.random()*16)+1
    var blueold=[]
    for(let i=1;i<=16;i++){
        if(i!=blue){
            blueold.push(i)
        }
    }
    blueold.unshift(blue)




    let blues=document.querySelectorAll('.balls-wp')[1].children
    for(let i in blues){
        if(i==0){
            blues[i].setAttribute('class','active')
        }
        if(blueold[i]<10){
            blues[i].innerText='0'+blueold[i]
        }else{
            blues[i].innerText=blueold[i]
        }  
    }


    let reds=document.querySelectorAll('.balls-wp')[0].children
    var redArr=[]
    for(let i=0;i<6;i++){
        let x=Math.floor(Math.random()*33)+1
        if(redArr.indexOf(x)==-1){
            redArr.push(x)
        }else{
            i--;
        }   
    }
    redArr.sort((a,b)=>{
        return a-b
    })
    console.log(redArr)
    var redold=[]
    for(let i=1;i<=33;i++){
        if(redArr.indexOf(i)==-1){
            redold.push(i)
        }
    }
    redold=redArr.concat(redold)
    console.log(redold)
    for(let i in reds){
        if(i<6){
            reds[i].setAttribute('class','active')
        }
        if(redold[i]<10){
            reds[i].innerText='0'+redold[i]
        }else{
            reds[i].innerText=redold[i]
        }  
    }
    
    blue=blue<10?'0'+blue:blue
    var reslut=''
    for(let x of redArr){
        if(x<10)reslut+='0'+x+','
        else reslut+=x+','
    }
    reslut=reslut+'|'+blue
    console.log(reslut)
    return reslut
}

发表于 2022-03-04 14:52:55 回复(0)