欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    VB生成不重复的随机数.docx

    • 资源ID:3275400       资源大小:16.54KB        全文页数:8页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VB生成不重复的随机数.docx

    1、VB生成不重复的随机数VB生成不重复的随机数 VB生成不重复的随机数 我的建议是:第一步、先做一个数组,存上这35个数(可以不是连续的数,也可以是人名、字符串什么的);第二步、随机生成一个1-35之间的数,输出;第三步:把这个数和数组的第一个单元交换;第四步、从数组的第2-35之间随机抽取第二个数,输出;第五步、把这随机抽取的第二个数和数组的第二个单元内容呼唤;第六步、随机抽取第三个数,输出。重复到从第35-35个数之间随机抽取一个数,这时直接输出最后一个就行了。 程序如下(VB6): 工程里默认的窗体上,画一个Command1,粘贴程序: option explicit private vA

    2、rray(1 to 35) as currency 定义数组个数 private sub command1_click() test end sub private sub InitArray() dim i as long 给数组赋值 for i=1 to 35 varray(i)=i next i end sub private sub Test() dim iStart as long dim iPos as long dim vTemp as currency dim sReturn as string InitArray randomize timer 设置随机因子,使其每次运行程序

    3、的随机数都不一样iStart=1 do iPos=int(rnd*(ubound(vArray)-iStart+1)+iStart 产生iStart到35(35取自vArray 的上标)之间的整数 sReturn=sReturn & vArray(iPos) & vbcrlf 输出 交换单元内容 vTemp=vArray(iStart) vArray(iStart)=vArray(iPos) vArray(iPos)=vTemp iStart=iStart+1 下次随机生成时,少生成一个 if iStart=ubound(vArray) then 最后一个了,直接输出 sReturn=sRet

    4、urn & vArray(ubound(vArray) Exit Do end if if iStart7 then exit do 如果需要生成几个数,就把7改成几,大于数组元素的个数,将输出速度的元素个数(这个例子是35) Loop msgbox sReturn msgbox 输出结果 end sub = = 方法二 Private Sub Command1_Click() Dim a(35) As Integer For i = 0 To 35 way1: Randomize a(i) = Int(Rnd() * 36) + 1 If i 1 Then For p = 0 To i -

    5、1 If a(p) = a(i) Then 与前面的对比,如果有重复,重新随机 GoTo way1 End If Next p End If Print a(i); 打印 Next i Print 打印 End Sub = = 方法三 如果楼主是要产生0-9等10个不重复的随机数的话,在随机数范围和个数相等 的情况下,楼上的方法都无异于散弹打鸟。在最不利情况下时间将无限延长,特别是对更多随机数的时候。 以下提供两种思路: 1.实际上我们只要确定了其中9个数字那么第10个数字根本不用去想; 确定8个,那么随机只在2个数之间,以此类推,使用动态数组如a(),先用for将10个数字加入,然后开始rn

    6、d*ubound(a)取得其中一个,放入数组b,再将该数字从a数组中剔除。速度:(n+n2)/2 2.只需要得到10个无序排列的数字即可,没必要去一直产生随机数,只要打乱顺序即可。在数组a中加入10个数字,然后开始for循环10次,每次产生一个10以内的随机数,然后将循环次数i与随机数的位置互换。速度:n = = 方法四 关于随机数的不重复求取 Option Base 1 Private Sub Command1_Click() Randomize Timer Dim A(1 To 10) As Integer 数组M Dim B(1 To 8) As String 数组N Dim i As

    7、Integer, k As Integer, t As Integer For i = 1 To 10 A(i) = i Next For i = 1 To 10 数组打乱 t = A(i) k = Fix(Rnd * 10) + 1 A(i) = A(k) A(k) = t Next For i = 1 To 8 从M中随机取出N个数,不重复 B(i) = A(i) Next Label1.Caption = Join(B(), , ) End Sub 方法五= Private Sub Command2_Click() Randomize Timer Dim Dimension(8) Dim

    8、 i As Byte, j As Byte Randomize Timer For i = 1 To 8 Dimension(i) = Fix(Rnd * 10) + 1 Next i A: For i = 1 To 7 For j = i + 1 To 8 If Dimension(i) = Dimension(j) Then Dimension(i) = Fix(Rnd * 10) + 1 GoTo A End If Next j Next i Label1.Caption = Join(Dimension(), , ) End Sub Private Sub Command3_Click

    9、() End End Sub = 方法六:(最快) 还有种方法是随机取数组中一个数,取出后将该元素与数组最后一个元素交换,然后随机上限减一 然后就是字符串的速度了.一次分配足够大的字符串,而不是用&连接字符串会快很多 Option Explicit Private Declare Function timeGetTime Lib winmm.dll () As Long Private Const MAX_N = 10000 - 1 在1(MAX_N+1)的数字中取 Private Sub Command1_Click() Dim Ary(MAX_N) As Long Dim i&, n&,

    10、p&, t&, ps& Dim s$, sTemp$ t = timeGetTime 初始化 For i = 0 To MAX_N Ary(i) = i + 1 Next Randomize 计算并为s分配足够的大小,下面是当n=MAX_N+1时最终的s的长度的精确值 i = MAX_N + 1: p = 0: ps = 9 Do Until i = n i = CLng(Rnd * (MAX_N - p) sTemp = CStr(Ary(i) Mid$(s, ps, Len(sTemp) = sTemp ps = ps + Len(sTemp) + 1 Ary(i) = Ary(MAX_N

    11、 - p) 如果不想破坏数据,把这里改成2个元素交换,而不是简单赋值 p = p + 1 抛弃数组最后一个元素 Loop s = Left$(s, ps - 2) 去掉多余的部分 t = timeGetTime - t Debug.Print s 输出 Debug.Print CStr(t), Len(s) End Sub = 方法七:(最快) Option Explicit Option Base 1 Private Declare Function timeGetTime Lib winmm.dll () As Long Const Nums = 10000 Private Sub Command1_Click() Dim t As Long Dim Num(Nums) As Long Dim i, n As Long Dim s As String t = timeGetTime Randomize For i = 1 To Nums n = Int(Rnd * Nums) + 1 If Num(n) = 0 Then Num(n) = n s = s & n & , Else i = i - 1 End If Next i Text1.Text = s t = timeGetTime - t MsgBox t End Sub


    注意事项

    本文(VB生成不重复的随机数.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开