




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、1VB 生成不重復的隨機數(shù)VB生成不重復的隨機數(shù)我的建議是:第一步、先做一個數(shù)組,存上這35個數(shù)(可以不是連續(xù)的數(shù),也 可以是人名、字符串什么的) ;第二步、隨機生成一個1-35之間的數(shù),輸出;第 三步:把這個數(shù)和數(shù)組的第一個單元交換;第四步、從數(shù)組的第2-35之間隨機 抽取第二個數(shù), 輸出;第五步、把這隨機抽取的第二個數(shù)和數(shù)組的第二個單元內(nèi) 容呼喚;第六步、隨機抽取第三個數(shù),輸出。重復到從第35-35個數(shù)之間隨 機抽取一個數(shù),這時直接輸出最后一個就行了。程序如下(VB6):工程里默認的窗體上,畫一個Commandl,粘貼程序:option explicitprivate vArray(1 t
2、o 35) as currency '定;義數(shù)組個數(shù)private sub command1_click()testend subprivate sub InitArray()dim i as long'給數(shù)組賦值for i=1 to 35 varray(i)=i next i end sub private sub Test() dim iStart as long dim iPos as2long dim vTemp as currency dim sReturn as stringInitArray randomize timer '設置隨機
3、因子,使其每次運行程序的隨機數(shù)都不一樣iStart=1 do iPos=int(rnd*(ubound(vArray)-iStart+1)+iStart '產(chǎn)生iStart到35(35取自vArray的上標)之間的整數(shù)sReturn=sReturn & vArray(iPos) & vbcrlf '輸;出'交換單元內(nèi)容vTemp=vArray(iStart) vArray(iStart)=vArray(iPos) vArray(iPos)=vTempiStart=iStart+1 '下次隨機生成時,少
4、生成一個if iStart>=ubound(vArray) then '最后一個了,直接輸出sReturn=sReturn & vArray(ubound(vArray)Exit Doend ifif iStart>7 then exit do '如果需要生成幾個數(shù), 就把7改成幾, 大于數(shù)組元 素的個數(shù),將輸出速度的元素個數(shù)(這個例子是35)Loopmsgbox sRetur n 'msgbox輸出結果end sub'='方法二Private Sub Command1_
5、Click()Dim a(35) As Integer3For i = 0 To 35way1:Randomizea(i) = Int(Rnd() * 36) + 1If i > 1 ThenFor p = 0 To i - 1If a(p) = a(i) Then '與前面的對比,如果有重復,重新隨機GoTo way1End IfNext p'=4End IfPrint a(i);'打印Next iPrint ""'打印End Sub'='方法三如
6、果樓主是要產(chǎn)生0-9等10個不重復的隨機數(shù)的話,在隨機數(shù)范圍和個數(shù)相等 的情況下, 樓上的方法都無異于散彈打鳥。 在最不利情況下時間將無限延長, 特 別是對更多隨機數(shù)的時候。以下提供兩種思路:1.實際上我們只要確定了其中9個數(shù)字那么第10個數(shù)字根本不用去想;確定8個,那么隨機只在2個數(shù)之間,以此類推,使用 動態(tài)數(shù)組如a(),先用for將10個數(shù)字加入,然后開始rnd*ubound(a)取得其中一 個,放入數(shù)組b,再將該數(shù)字從a數(shù)組中剔除。速度:(n+nA2)/22.只需要得到10個無序排列的數(shù)字即可,沒必要去一直產(chǎn)生隨機數(shù),只要打亂 順序即可。在數(shù)組a中加入10個數(shù)字,然后開始for循環(huán)10次
7、,每次產(chǎn)生一個10以內(nèi)的隨機數(shù),然后將循環(huán)次數(shù)i與隨機數(shù)的位置互換。速度:n'方法四5關于隨機數(shù)的不重復求取Option Base 1Private Sub Command1_Click()Randomize TimerDim A(1 To 10) As Integer '數(shù)組MDim B(1 To 8) As String'數(shù)組NDim i As Integer, k As Integer, t As IntegerFor i = 1 To 10A(i) = iNextFor i = 1 To 10'數(shù)組打亂t = A(i)k
8、= Fix(Rnd * 10) + 1A(i) = A(k)A(k) = tNextFor i = 1 To 8 '從; M中隨機取出N個數(shù),不重復B(i) = A(i)NextLabel1.Caption = Join(B(), " , ")End Sub'方法五= PrivateSub Command2_Click()Randomize Timer6Dim Dimension(8)Dim i As Byte, j As ByteRandomize TimerFor i = 1 To 8Dimension(i) = Fix(R
9、nd * 10) + 1Next iA:For i = 1 To 7For j = i + 1 To 8If Dimension(i) = Dimension(j) ThenDimension(i) = Fix(Rnd * 10) + 1GoTo AEnd IfNext jNext iLabel1.Caption = Join(Dimension(), " , ")End SubPrivate Sub Command3_Click()EndEnd Sub'='方法六:(最快)還有種方法是隨機取數(shù)組中一個數(shù),取出后將該元素與數(shù)組
10、最后一個元素交換,然 后隨機上限減一然后就是字符串的速度了一次分配足夠大的字符串,而不是用&連接字符 串會快很多Option Explicit7Private Declare Function timeGetTime Lib "winmm.dll" () As LongPrivate Const MAX_N = 10000 - 1 在1(MAX_N+1的數(shù)字中取Private Sub Command1_Click()Dim Ary(MAX_N) As LongDim i&, n&, p&a
11、mp;, t&, ps&Dim s$, sTemp$ t = timeGetTime'初始化For i = 0 To MAX_NAry(i) = i + 1NextRandomize8''計算并為s分配足夠的大小,下面是當n=MAX_N+1時最終的s的長度的精確值'i = MAX_N + 1: p = 0: ps = 9'Do Until i <= 9'p = p + 1'n = n + ps * p'ps = ps *
12、10'i = i 10'Loop'n = n + (p + 1) * (MAX_N - CLn g(10Ap) + 2) + MAX_N's = String$(n, ",")9n = MAX_N 2 '要取的個數(shù),取所有的話用MAX_N+1'計算并為s分配足夠的大小String$(n * Len(CStr(MAX_N +配足夠大的內(nèi)存,以后再減p = 0: ps = 1Do Until p >= n i = CLng(Rnd * (MAX_N -
13、p) sTemp = CStr(Ary(i)Mid$(s, ps, Len(sTemp) = sTemp ps = ps + Len(sTemp) + 1Ary(i) = Ary(MAX_N - p) '如;果不想破壞數(shù)據(jù),把這里改成2個元素交換,而不是 簡單賦值p = p + 1 '拋棄數(shù)組最后一個元素Loops = Left$(s, ps - 2) '去;掉多余的部分t = timeGetTime - tDebug.Print s '輸出1), ",") '分10Debug.Print CStr(t), Len(s)End Sub'='方法七:(最快)Option ExplicitOption Base 1Private Declare Function timeGetTime Lib "winmm.dll" () As LongConst Nums = 10000Private Sub Command1_Click()Dim t As LongDim Num(Nums) As LongDim i, n As LongDim s A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大寒節(jié)氣幼兒護理
- 傳統(tǒng)治療體系概述
- 智慧城市三維管網(wǎng)設計施工與質(zhì)量保障服務合同
- 核電站輔助崗位派遣服務及管理協(xié)議
- 生物有機肥生產(chǎn)技術許可與售后服務合同
- 文創(chuàng)園區(qū)產(chǎn)業(yè)孵化與委托經(jīng)營管理合同
- 游戲動漫IP授權與跨界合作開發(fā)合同
- 電池產(chǎn)品安全評估與理賠補充合同
- 伊利集團年度培訓體系總結
- 高效節(jié)能工業(yè)廢氣處理系統(tǒng)驗收質(zhì)量標準協(xié)議
- 噴淋塔設計標準參考
- 國家課程設置標準課時
- 高支模板監(jiān)測記錄
- 涂裝工藝流程、PFMEA2018
- 《蘇泊爾盈利能力分析》8000字
- 浙教版初中科學所有實驗目錄及所需器材九上
- 車站信號自動控制教案-四線制道岔控制啟動電路
- 數(shù)字經(jīng)濟學導論-全套課件
- 委托書掛靠樣本
- 大學生職業(yè)發(fā)展與就業(yè)指導學習通課后章節(jié)答案期末考試題庫2023年
- 立體幾何中的空間距離問題
評論
0/150
提交評論