列出不重複的隨機亂數
要如何列出不重複的隨機亂數呢?
因為隨機亂數連續取值,會產生重複號碼。
要解決這個問題。
例如:程式輸出 樂透彩 選號 49個數字隨機取6個想到三個陣列方法。
- 方法一:直接把全部數字49個號碼儲存在陣列裡面,
再用迴圈跑個一輪做隨機元素交換,for(i=0; i<arr.length; i++),
迴圈裡面用一個隨機亂數取值,
指到哪個元素就 i=序列的元素跟那個隨機元素交換。
- 方法二:如同方法一把全部數字49個號碼儲存在陣列裡面,
再用隨機方式取出陣列裡的元素號碼,並且重新設定該元素內的
值為號碼以外的值,像是負一或其他,然後再繼續隨機取值,
如果取到的值為設定的取出重設值(代表已經選過了),就再來一次。
- 方法三:使用兩個迴圈,內層迴圈裡隨機亂數取值,然後再跟之前
取過號碼的元素做比較,如果發現有一樣的號碼,可以使用i--讓
隨機亂數在重找一遍號碼,當然外面迴圈跑到越後面,後面的元素
取得的號碼跟前面重複的機會就越高。所以,這個迴圈會跑個很多次,
使用計數器,發現49取49個亂數的迴圈跑個四百多次都有可能。 - 方法四:已選出來的,把儲存值更改成零或負一..
Javascript使用方法二更方便,直接刪除已經取得的號碼。
<script type="text/javascript">
var arr =[];
for (i=0;i<49;i++){
arr[i]=i+1;
}
var rancodes6= new Array(6);
function ans(){
var x;
for(i=0;i<6;i++){
//這邊記得要用49-i,元素每取走一個,就少一個。
//這邊記得要用49-i,元素每取走一個,就少一個。
x=Math.floor(Math.random()*(49-i))
rancodes6[i]=arr.splice(x,1);
}
return rancodes6;
}
document.write("<div style='font-size:30px'>",ans(),"</div>");
document.write(arr.length,"</div>");
</script>
JS使用方法三 49隨機取49 恩哈哈
<script type="text/javascript">
var a = [49];var count=0;
for(i=0 ; i<49 ; i++){
temp = Math.floor(Math.random()*49+1);
count ++;
if(a.indexOf(temp)<0){
a[i]=temp;
}else{ i-- }
}
document.write( a+"總共跑了幾次:"+count )
</script>
可以再用排序法把陣列依序排列
for(i=0; i<a.length-1; i++){
for(j=i+1; j<a.length;j++){
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
要注意JS的陣列排序,像是 3會比25,20還要大,因為它會自動拿字元編碼來比較,
而不是數字大小。
所以上面的排序法比較要改寫成 if( parseInt(a[i]) > parseInt(a[j]) )
寫程式就是這樣,一堆細節沒注意,結果就不如意。
}
要注意JS的陣列排序,像是 3會比25,20還要大,因為它會自動拿字元編碼來比較,
而不是數字大小。
所以上面的排序法比較要改寫成 if( parseInt(a[i]) > parseInt(a[j]) )
寫程式就是這樣,一堆細節沒注意,結果就不如意。
目前暫時想到這些。
要注意JS的陣列排序,3會比25,20還要大,因為它會自動拿字元編碼來比較,
回覆刪除而不是數字大小。