关于活动有小伙伴说,需要一个必中的方法,这里提供一个。

芒果 121个月前 提问
0

  现在我们抽奖需要一个算法。

需求:

1. 用javascript;

2.一定要是公用的方法;有两个值:一个是获奖的人数,另一个是参加的总人数。最后获取到 获奖人的编号

看看谁的效率高,小伙伴们把你的代码写在下方的回复中。看看谁的效率高,水的帖子被顶的数量高。那么我们将拿出一本书来奖励这位小伙伴。

/**
 * 抽奖方法
 * @param winner 获奖的总人数
 * @param person 参与的总人数
 */
function activity(winner, person){
var newArr = [];
    for (var i = 0; i < winner; i++) {
        newArr[i] = Math.floor(Math.random() * person + 1);
    }
function distice(){
for (var i=newArr.length-1; i>=0; i--){
var targetNode = newArr[i];
for (var j=0; j<i; j++){
if(targetNode == newArr[j]){
newArr.splice(i,1);
break;
}
}
}
if(newArr.length < winner){
newArr.push(Math.floor(Math.random() * person + 1));
distice();
}else{
console.log("中奖人的编号:" + newArr);
return newArr;
}
}
distice();
}

这是我写的 ,

  • 0
    Vaer 121个月前 回答
    刚刚发了一个结果被隐藏了一部分代码,。。。希望这次不要被隐藏了。。。

    /**

     * [抽奖方法]

     * @param  {[Number]} winner [获奖的总人数]

     * @param  {[Number]} person [参与的总人数]

     * @return {[Array]}  wins   [获奖人的编号]

     */

    var get = function (winner,person){

        console.log(+new Date());

        var wins = [],

            objs = {};

        for(var i=0;i<winner;i++){

            var p = Math.floor(Math.random()*person + 1);

            if(wins.length == 10) break;

            if(!objs[p]){

                objs[p] = true;

                wins.push(p);

            }   

        }

        console.log(wins);

        console.log(+new Date());

        return wins;

    }

    //Test

    get(10,1000000);

  • 0
    jinceon 121个月前 回答
    function activity(winner, person){
       var winnerNos = [];
       for(var i=0;i<winner;i++){
            winnerNos.push(i);
       }
       
    //随机乱序
       winnerNos.sort(function(a, b){
            return Math.random()>0.5 ? 1:-1;
       });
    //取前N个
       for(var j=0;j<person;j++){
            console.log(winnerNos[j]);
       }
    }
  • 0
    262959969@qq.com 121个月前 回答
    原来这个test比的不是代码执行效率, 而是能不能被看明白. 
  • 0
    yechao_92@163.com 121个月前 回答
    /**
     * 抽奖方法
     * @param winner 获奖的总人数
     * @param total 参与的总人数
     */
    function lottery(winner, total) {
    var obj = {};
    var arr = [];
    while (arr.length < winner) {
    var luckyMan = Math.floor(Math.random() * total + 1);
    if (!obj[luckyMan]) {
    arr.push(luckyMan);
    obj[luckyMan] = 1;
    }
    }
    console.log(arr);
    }
    // 求书求书
  • 0
    262959969@qq.com 121个月前 回答

    /**
     * 抽奖方法
     * @param winner 获奖的总人数
     * @param person 参与的总人数
     */

    fuction lotery(winner, person){

        for(var i = 1, arr = []; i <= person, arr.length < winner; i++){

            if(Math.floor(Math.random()*(person + 1 - i)) < (winner - arr.length)){

                arr.push(i);

            }

        }

        return arr;

    }

    console.log(arr);

  • 0
    /**
    * 抽奖方法
    * @param winner 获奖的总人数
    * @param person 参与的总人数
    */
    function activity(winner,person){
    var obj = {},
    arr = [],
    idx = 0;
    for(var i = 1;i <= person;i++){
    obj[i] = 1;
    }
    function getpri(){
    var ran = Math.floor(Math.random()*person);
    if(!obj[ran]){
    // console.log(1)
    return getpri();
    }else{
    obj[ran] = 0;
    return ran;
    }
    }
    for(var i = 0;i < winner;i++){
    arr.push(getpri());
    }
    console.log("中奖人的编号:" + arr);
    }
    //算法的不会,我就是来水水,给个必中啊
  • 0
    498854241@qq.com 121个月前 回答
    /**
     * 抽奖方法
     * @param winner 获奖的总人数
     * @param sum 参与的总人数
     */

     function getAwarder(winner,sum){
      console.log(Date())
      var newArr=[],
      obj = {},
      num=0;
      for(var i=0;i<winner;){
      num = Math.floor(Math.random() * sum + 1);
      if(!obj[num]){
      newArr[newArr.length] = num;
      i++
      }
      }
      console.log(Date())
      console.log(newArr.length)
     }
  • 0
    jinceon 121个月前 回答
    function activity(winner, person){ var winnerNos = []; for(var i=0;i0.5 ? 1:-1; }); //取前N个 for(var j=0;j
  • 0
    jinceon 121个月前 回答
    function activity(winner, person){ var winnerNos = []; for(var i=0;i0.5 ? 1:-1; }); //取前N个 for(var j=0;j
  • 0
    262959969@qq.com 121个月前 回答

    /**
     * 抽奖方法
     * @param winner 获奖的总人数
     * @param person 参与的总人数
     */

    function lotery(winner, person){

        for(var i = 1, arr = []; i <= person, arr.length < winner; i++){

            if(Math.floor(Math.random()*(person + 1 - i)) < (winner - arr.length)){

                arr.push(i);

            }

        }

        return arr;

    }

    console.log(lotery(10, 100000));

  • 0
    262959969@qq.com 121个月前 回答

    /**
     * 抽奖方法
     * @param winner 获奖的总人数
     * @param person 参与的总人数
     */

    fuction lotery(winner, person){

        for(var i = 1, arr = []; i <= person, arr.length < winner; i++){

            if(Math.floor(Math.random()*(person + 1 - i)) < (winner - arr.length)){

                arr.push(i);

            }

        }

        return arr;

    }

    console.log(lotery(10, 100000));

  • 0
    262959969@qq.com 121个月前 回答
    for(var i = 1, all = 10, winner = 5, arr = []; i <= all, arr.length < winner; i++){
        Math.floor(Math.random()*(all + 1 - i)) < (winner - arr.length) && arr.push(i);
    }
    alert(arr);

    这样可以吗???
  • 0
    262959969@qq.com 121个月前 回答
    for(var i = 1, all = 10,winner = 5,arr = []; i <= all, arr.length < winner; i++)Math.floor(Math.random()*(all + 1 - i)) < (winner - arr.length) && arr.push(i);
    alert(arr);
  • 0
    jsqqing@163.com 121个月前 回答
    /**
     * 抽奖方法
     * @param winner 获奖的总人数
     * @param total 参与的总人数
     */

    function letme(wins,total){
        
         var winners = [],
               i,
               luckyNum ;

         for ( i = 0 ; i < wins ; i ++){
             luckyNum = Math.floor(Math.random() * total + 1);
             if( !winners[luckyNum] ){
                  winners[luckyNum] = 1;
             }
         }
         
        console.log(winners)
    }

  • 0
    Vaer 121个月前 回答
    /**
     * [抽奖方法]
     * @param  {[Number]} winner [获奖的总人数]
     * @param  {[Number]} person [参与的总人数]
     * @return {[Array]}  wins   [获奖人的编号]
     */
    var get = function (winner,person){
        console.log(+new Date());
        var wins = [],
            objs = {};
        for(var i=0;i
  • 0
    duang的一下 121个月前 回答
    /** * 抽奖方法 * @param winner 获奖的总人数 * @param person 参与的总人数 */ var activity = { init: function(winner, person) { var num = Math.abs(winner), max = Math.abs(person); if (num && num <= max) { var _this = this; activity.array = new Array(); while (activity.array.length < num) { _this.getArray(max); } console.log("中奖人的编号:" + activity.array.sort(_this.sortNumber)); } else { return false; } }, getArray: function(person) { var personNum = Math.floor(Math.random() * person + 1); for (var i = 0; i < activity.array.length; i++) { if (activity.array[i] == personNum) { return false; } } activity.array.push(personNum); }, sortNumber: function(a, b) { return a - b; } }; activity.init(5, 10);