抽奖
const readline = require('readline-sync');let nameStr = `余秋雨,文章,曾诚,高茂卜,孙建峰,唐明,黄宇,肖玉林,简帮炜,曾薪月,侯芹,田浩民,梁超栋,彭浩峰,李嘉林,房俊霖,马玉琨`;// 封装随机函数function random(n, m) {if (!m) { // 防止用户只传一个参数,(不写这个,只传一个参数,会报错NaN)[m, n] = [n, 0]}let i = parseInt(Math.random() * (m - n + 1) + n)return i}// 将字符串通过 split 转化为 数组let str = nameStr.split(',')console.log(str);//使用函数Lottery()//抽奖主函数function Lottery() {for (let i = 3; i > 0; i--) {console.log(`请输入${i}等奖的名额`);let opt = readline.question() - 0;for (let j = 1; j <= opt; j++) { //想要几个人中奖let index = random(str.length - 1); //下标随机数为-下标长度console.log(`${i}得奖为:${str[index]}`);str.splice(index, 1) //删除选中那个人}}}
注意:
- 因为这里只抽三次奖,所以三次应该套在外面
- 中奖名额是我们定的,所以需要设置一个上限 j <= opt
- 最重要的是:通过 splice 删除,会影响原数组。这样可以避免出现重复的情况
双色球
/*红球 6个 数字范围:1-33 不重复蓝球 1个 数字范围:1-16中奖规则:R + B 即 红球选中个数 搭配 蓝球号码。一等奖:6+1 即:红球中6个,蓝球也中一等奖:6+1 (钱(ni)太(zhong)多(bu)了,也封顶¥500万?)二等奖:6+0 (封顶¥500万)三等奖:5+1 (¥3000)四等奖:5+0 | 4+1 (¥200)五等奖:4+0 | 3+1 (¥10)六等奖:2+1 | 1+1 | 0+1(¥5)*/const readline = require('readline-sync');//封装随机函数function random(n, m) {if (!m) {[m, n] = [n, 0]}let i = parseInt(Math.random() * (m - n + 1) + n)return i; // 需要一个返回值}//双色球 随机数function createNumber() {//去重复let s = new Set(); // 通过Set 创建的变量。里面的值都是唯一的。//往里面添加值while (s.size < 6) { // 可以设置 对象的长度s.add(random(1, 33))}// 将对象转化为数组,并且排序let redBalls = [...s].sort((a, b) => a - b);console.log(redBalls);let blueBall = random(1, 16)console.log(blueBall);//需要一个返回值return [redBalls, blueBall] // 函数都需要返回值,否则没办法输出}//机选let computer = createNumber()console.log(computer);//中奖号码let blueBall = random(1, 16)let [luckyredBalls, luckyblueBall] = createNumber()console.log(luckyredBalls, luckyblueBall);//红球相同的个数,也就是交集// let conut = computer[0].filter(function(item){// return luckyredBalls.indexOf(item)!=-1;// }).length;let conut = computer[0].filter((item) => luckyredBalls.indexOf(item) != -1).lengthconsole.log(conut);
