zoukankan      html  css  js  c++  java
  • 在一定[min,max]区间,生成n个不重复的随机数的封装函数

     引:生成一个[min,max]区间的一个随机数,随机数生成相关问题参考→链接

    var ran=parseInt(Math.random()*(max-min+1)+min); //生成一个[min,max]区间的一个随机数

    思路一:先生成n个[min,max]区间随机数,比较是否重复,如重复则返回,再次执行。

    function my_ran(n,min,max){
     var arr=[];
     for(i=0;i<n;i++){
      arr[i]=parseInt(Math.random()*(max-min+1)+min);
     }
     for(i=0;i<n;i++){
      for(j=i+1;j<n;j++){
       if(arr[i]==arr[j]){
        my_ran(n,min,max);
        return fault;
       }
      }
     }
     return arr;
    }

    思路二:生成第i个[min,max]区间的随机数,并与之前i-1个数比较,如有重复,令i=i-1;重复生成第i个随机数。

    function my_ran2(n,min,max){
     var arr=[];
     for(i=0;i<n;i++){
      arr[i]=parseInt(Math.random()*(max-min+1)+min);
      for(j=0;j<i;j++){
       if(arr[i]==arr[j]){
        i=i-1;
        break;
       }
      }
     }
     return arr;
    }

    思路三:生成[min,max]区间的一个顺序数组,打乱数组,输出前n个值。

    function my_ran3(n,min,max){
     var arr=[];
     var arr2=[];
     for(i=0;i<max-min+1;i++){
      arr[i]=i+min;
     }
     for(var j,x,i=arr.length;i;j=parseInt(Math.random()*i),x=arr[--i],arr[i]=arr[j],arr[j]=x);
     for(i=0;i<n;i++){
      arr2[i]=arr[i];
     }
     return arr2;
    }

    思路四:生成[min,max]区间的一个顺序数组,从中随机选出一个值,然后在数组中删掉这个值,再选第二个随机值。

    function my_ran4(n,min,max){
     var arr=[];
     var arr2=[];
     for(i=0;i<max-min+1;i++){
      arr[i]=i+min;
     }
     for(i=0;i<n;i++){
      var x=parseInt(Math.random()*arr.length);
      arr2[i]=arr[x];
      for(j=x;j<arr.length;j++){
       arr[j]=arr[j+1];
      }
      arr.length=arr.length-1;
     }
     return arr2;
    }
    敢想,敢做
  • 相关阅读:
    小程序导航栏文字动态修改
    小程序之页面跳转传递参数问题
    怎样像gitHub上上传文件
    js实现数组去重
    Promise 解决同步请求问题
    input 实现一次性上传文件
    layui中load具体用法
    echarts点击柱状图时触发点击事件
    js求100以内的素数
    js怎样判断一个数是质数
  • 原文地址:https://www.cnblogs.com/ZL8655/p/5379975.html
Copyright © 2011-2022 走看看