從連續整數a~b中隨機選取n個不重復的數字並且降序排列(in JS)

如果考慮先選出來數字然後排練,不僅要考察數字是不是重復,還要排列,比較復雜。

反過來,如果直接在一個已經排好的降序序列中刪除數字,然後在新的已經刪除過的數字序列中繼續刪除就容易多瞭。

 

[javascript] 
/*問題描述,從a~b的數之間隨機選取n個不重復的數並且將它們降序排列。
思路:其實就是將從b~a排好的數中刪除b-a-n+1個數。用這個方法可以模擬一個機選的彩票序號*/ 
function $(str) 
{   return document.write(str); 

function getnum(a,b,n) 

var i=b; 
var del = b-a-n+1; 
var arr = new Array(); 
for(;i>=a;i–) 
    arr.push(i); 
for(;del>0;del–) 

    arr.splice(Math.floor(Math.random()*arr.length), 1); 

return arr; 

 
function show(a) 

    for(var i=0;i<a.length;i++) 
    {   $(a[i]+" ");} 
    $("</br>"); 

var arr = getnum(1,32,8); 
show(arr); 

 因為js的Array中提供瞭sort()對象,也可以采用直接選出數字再排列的方法。

[javascript] 
function descent(a,b) 

    return b-a; 

function getnum2(a,b,n)/*采用直接選取的方法,將選過的刪掉,在新的數組中存放選出的數。*/ 

    var arr = new Array(); 
    var i=a; 
    var arr2 = new Array(); 
    for(;i<=b;i++) 
    {   arr.push(i);} 
    show(arr); 
    for(;n>0;n–) 
    {   arr2.push(arr.splice(Math.floor(Math.random()*arr.length),1));} 
    arr2.sort(descent);/*對於數字sort,需要寫一個函數*/ 
    return arr2; 

發佈留言