Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk menjana satu set nombor rawak enam digit yang tidak berulang

Ia diperlukan untuk menjana tatasusunan yang mengandungi enam nombor rawak, dan nombor rawak ini tidak boleh diulang.
( Tatasusunan mengandungi berbilang nombor rawak, setiap nombor rawak ialah enam digit, dan nombor rawak dalam tatasusunan tidak berulang)

Anda boleh merujuk kepada dua kod berikut dan menggabungkan kedua-duanya.

//随机六位数
function MathRand()
{
    var Num="";
    for(var i=0;i<6;i++)
    {
        Num+=Math.floor(Math.random()*10);
    }
}
//不重复随机数组
/*  num 要产生多少个随机数
    from 产生随机数的最小值
    to 产生随机数的最大值   */
function createRandom(num ,from ,to )
{
    var arr=[];
    for(var i=from;i<=to;i++)
        arr.push(i);
    arr.sort(function(){
        return 0.5-Math.random();
    });
    arr.length=num;
    return arr;
}
 
function createRandom2(num , from , to)
{
    var arr=[];
    var json={};
    while(arr.length<num)
    {
        //产生单个随机数
        var ranNum=Math.ceil(Math.random()*(to-from))+from;
        //通过判断json对象的索引值是否存在 来标记 是否重复
        if(!json[ranNum])
        {
            json[ranNum]=1;
            arr.push(ranNum);
        }
         
    }
    return arr;
     
     
}
alert(createRandom2(10,0,50));//生成10个从0-50之间不重复的随机数
过去多啦不再A梦过去多啦不再A梦2710 hari yang lalu1432

membalas semua(6)saya akan balas

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:41:10

    Ini boleh dilakukan melalui rekursi. Untuk kemudahan demonstrasi, saya menukarnya untuk menjana satu set nombor rawak integer positif tidak berulang dalam 10.
    Kaedah utama yang bergantung padanya ialah kaedah indexOf(), yang digunakan untuk mencari indeks nilai tertentu dalam tatasusunan Jika ia tidak ditemui dalam tatasusunan, -1 dikembalikan.
    Kod adalah seperti berikut:

    var arr=[];
    function getRandom(){
        var random=Math.floor(Math.random()*1000000);
        console.log(random);
        //判断生成的数在数组中是否存在,判断是否是6位数
        //如果不存在而且是6位数,放入数组
        if(random.toString().length==6&&arr.indexOf(random)==-1){     
            arr.push(random)
        }else{
        //如果存在或者不是6位数,接着调用这个函数,生成满足要求的随机数
            console.log("不符合要求的"+random)
            getRandom();
        }
    }
    for(var i=0;i<6;i++){
        getRandom();
    }
    console.log(arr);

    balas
    0
  • 世界只因有你

    世界只因有你2017-05-19 10:41:10

    Masa tidak akan berulang, dan menggunakan cap masa untuk menjana nombor rawak juga tidak akan berulang.

    console.log((Math.random() * Date.now()).toFixed(0));
    // 6位的
    console.log((Math.random() * Date.now() / 1000000).toFixed(0));

    Dan tidak ada nombor rawak tidak berulang mutlak di dunia ini, dan semua kombinasi tidak terhingga Walaupun semua nombor rawak yang dijana disimpan, dan kemudian dibandingkan apabila dijana, didapati bahawa mereka telah Jika ia wujud, nombor rawak baharu akan dihasilkan Apabila semua kombinasi telah dicuba, gelung tak terhingga akhirnya akan terbentuk. Lebih-lebih lagi, ia hanya 6 digit, dan terdapat hanya 472,392 kombinasi kesemuanya.

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-05-19 10:41:10

    Izinkan saya memberikan anda yang mudah dan mudah digunakan di atas tidak dapat menjamin bahawa ia tidak akan berulang, ingat untuk membeli tiket loteri. Math.random().toString(36).slice(2,8)

    balas
    0
  • 黄舟

    黄舟2017-05-19 10:41:10

    Algoritma penjanaan urutan nombor rawak yang tidak berulang
    Saya melihat artikel yang sangat bijak Hasil dan kecekapan boleh dijamin Gunakan kod + komen untuk melaksanakannya:

    function getRandom(numCount) {
            var numList = [];
            var numMin = 100000;
            var numMax = 999999;
            var listLen = numMax - numMin + 1;
    
            var outPut = [];
    
            // 将所有数顺序装填到数字列表中
            for (var i = numMin; i < numMax + 1; i++) {
                numList.push(i);
            }
    
            var randNum;
            for (var j = 0; j < numCount; j++) {
                // 产生一个小于列表长度的随机数randNum
                randNum = Math.floor(Math.random() * listLen);
                // 将列表的第randNum项输出
                outPut.push(numList[randNum]);
                // 将列表的最后一项替换到刚被取出的数的位置
                numList[randNum] = numList[listLen - 1];
                // 列表长度减一,即列表最后一项不会再被取到;
                listLen--;
            }
    
            return outPut;
        }
        var arr = getRandom(30);
        console.log(arr);

    JS tidak ditulis dengan baik (melarikan diri

    balas
    0
  • 黄舟

    黄舟2017-05-19 10:41:10

    Tulis gelung untuk menjana nombor rawak setiap kali dan buang ke dalam set Apabila set cukup panjang, ia akan ditukar menjadi tatasusunan dan dikembalikan

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-19 10:41:10

    Jika nombor yang diperlukan dalam tatasusunan adalah kecil, anda boleh menggunakan kaedah tatasusunan untuk menentukannya

    console.time('time:');
    function createRandomArr(l){
        var r = [];
        var o = {};
        var a;
        for (var i = 0;i < l;i++){
            a = Math.random().toString().slice(2,8);
            o[a] ? i-- : (r.push(a),o[a] = true);
        }
        return r;
    }
    var res = createRandomArr(10000);
    console.log(res,res.length);
    console.timeEnd("time:");

    balas
    0
  • Batalbalas