如何在VB中實作永不重復的亂數?1~30或1~50?我用的是
Int(Rnd() * 30)
uj5u.com熱心網友回復:
1-30或1-50為整數的亂數只有30個或者50個,不可能永不重復uj5u.com熱心網友回復:
既然隨機怎么能不重復記錄出現過的
uj5u.com熱心網友回復:
一共就30到50個數字,何來"永不重復"之說?uj5u.com熱心網友回復:
既然是隨機,怎么會有重復?1~30,總不可能每次都出現同一個數字吧?uj5u.com熱心網友回復:
第一個數用 Rnd() 計算得到(同時作為后續的種子);其他的數用線性同余演算法計算;
可以保證取 30 次正好將 1~30 每個都取一次。
uj5u.com熱心網友回復:
Option Explicit
Private Sub Command1_Click()
Dim i As Integer, n As Integer
If List1.ListCount Then
If List1.ListCount > 1 Then
n = Int(Rnd * List1.ListCount)
Else
n = 0
End If
List2.AddItem List1.List(n)
List1.RemoveItem n
End If
End Sub
Private Sub Form_Load()
Dim i As Integer
For i = 1 To 30
List1.AddItem i
Next i
List2.Clear
Randomize
End Sub
uj5u.com熱心網友回復:
google 洗牌演算法uj5u.com熱心網友回復:
是不是要記錄前面已取到的資料???uj5u.com熱心網友回復:
實際上是隨機從一個串列中取數。每當選中串列中的一個記錄,就將其從串列中洗掉。uj5u.com熱心網友回復:
挖的好墳!去 Google: 線性同余
除了要記下前個值,不需要額外的存盤空間,純演算法。
uj5u.com熱心網友回復:
果然是個墳
uj5u.com熱心網友回復:
宇宙射線付訓穿了CSDN服務器的時鐘。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/115396.html
標籤:多媒體
上一篇:請教一個復雜報表的問題
下一篇:求助——創建動態控制元件
