




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VB 生成不重复的随机数VB生成不重复的随机数我的建议是:第一步、先做一个数组,存上这 35 个数(可以不是连续的数,也 可以是人名、字符串什么的) ;第二步、随机生成一个 1-35之间的数,输出;第 三步:把这个数和数组的第一个单元交换;第四步、从数组的第 2-35 之间随机 抽取第二个数, 输出;第五步、把这随机抽取的第二个数和数组的第二个单元内 容呼唤;第六步、随机抽取第三个数,输出。 。重复到从第 35-35 个数之间随 机抽取一个数,这时直接输出最后一个就行了。程序如下( VB6):工程里默认的窗体上,画一个 Commandl,粘贴程序:option explicitprivate
2、vArray(1 to 35) as currency '定; 义数组个数private sub command1_click()testend subprivate 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 stringInitArray randomize timer&a
3、mp;#39;设置随机因子,使其每次运行程序的随机数都不一样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)=vTempiStart=iStart+1
4、'下次随机生成时,少生成一个if iStart>=ubound(vArray) then '最后一个了,直接输出sReturn=sReturn & vArray(ubound(vArray)Exit Doend ifif iStart>7 then exit do ' 如果需要生成几个数, 就把 7 改成几, 大于数组元 素的个数,将输出速度的元素个数 (这个例子是 35)Loopmsgbox sRetur n 'msgbox 输出结果end sub'='
5、方法二Private Sub Command1_Click()Dim a(35) As IntegerFor 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 p3End IfPrint a(i);'打印Next iPrint ""'打印End Sub'
6、='方法三如果楼主是要产生 0-9 等 10 个不重复的随机数的话,在随机数范围和个数相等 的情况下, 楼上的方法都无异于散弹打鸟。 在最不利情况下时间将无限延长, 特 别是对更多随机数的时候。以下提供两种思路:1.实际上我们只要确定了其中 9个数字那么第 10 个数字根本不用去想;确定 8 个,那么随机只在 2 个数之间,以此类推,使用 动态数组如a(),先用for将10个数字加入,然后开始rnd*ubound(a)取得其中一 个,放入数组b,再将该数字从a数组中剔除。速度:(n+nA2)/22.只需要得到 10 个无序排列的数字即可,没必要去一直产生随机数,只要打乱 顺序即
7、可。在数组 a 中加入 10 个数字,然后开始 for 循环 10 次,每次产生一个 10 以内的随机数,然后将循环次数 i 与随机数的位置互换。速度: n'方法四关于随机数的不重复求取Option Base 1Private Sub Command1_Click()Randomize TimerDim A(1 To 10) As Integer '数组 MDim B(1 To 8) As String'数组 NDim i As Integer, k As Integer, t As IntegerFor i = 1 To 10A(i) = iN
8、extFor i = 1 To 10' 数组打乱t = A(i)k = Fix(Rnd * 10) + 1A(i) = A(k)A(k) = tNextFor i = 1 To 8 '从; M 中随机取出 N 个数 ,不重复B(i) = A(i)NextLabel1.Caption = Join(B(), " , ")End Sub'方法五= Private Sub Command2_Click()Randomize TimerDim Dimension(8)Dim i As Byte, j As ByteRan
9、domize TimerFor i = 1 To 8Dimension(i) = Fix(Rnd * 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
10、9;= '方法六:(最快)还有种方法是随机取数组中一个数 ,取出后将该元素与数组最后一个元素交换 ,然 后随机上限减一然后就是字符串的速度了一次分配足够大的字符串,而不是用&连接字符 串会快很多Option ExplicitPrivate Declare Function timeGetTime Lib "winmm.dll" () As LongPrivate Const MAX_N = 10000 - 1 在 1(MAX_N+1的数字中取Private Sub Command1_Click()Dim Ary(
11、MAX_N) As LongDim i&, n&, p&, t&, ps&Dim s$, sTemp$ t = timeGetTime'初始化For i = 0 To MAX_NAry(i) = i + 1NextRandomize''计算并为s分配足够的大小,下面是当n=MAX_N+1时最终的s的长度的精确值'i = MAX_N + 1: p = 0: ps = 9'Do Until i <= 9'p =
12、 p + 1'n = n + ps * p'ps = ps * 10'i = i 10'Loop'n = n + (p + 1) * (MAX_N - CLn g(10 A p) + 2) + MAX_N's = String$(n, ",")n = MAX_N 2 '要取的个数 ,取所有的话用 MAX_N+1'计算并为 s 分配足够的大小1), ",") '分String$(n
13、* Len(CStr(MAX_N + 配足够大的内存 ,以后再减 p = 0: ps = 1Do Until p >= n i = CLng(Rnd * (MAX_N - p) sTemp = CStr(Ary(i)Mid$(s, ps, Len(sTemp) = sTemp ps = ps + Len(sTemp) + 1Ary(i) = Ary(MAX_N - p) '如; 果不想破坏数据 ,把这里改成 2个元素交换 ,而不是 简单赋值p = p + 1 '抛弃数组最后一个元素Loops = Left$(s, ps - 2) '去;
14、 掉多余的部分t = timeGetTime - tDebug.Print s '输出Debug.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 LongDi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工地灯具供货合同协议
- 私人房水电安装合同协议
- 新时代教师思想政治教育体系建设
- 2024年幽门螺杆菌感染基层诊疗指南讲座课件
- 夜场出租转让合同协议
- 培训普通话课件
- 第二单元写作《学会记事》课件 2024-2025学年统编版语文七年级上册
- 小学教育的学校中的法律关系
- 高校创新管理课程
- 智能汽车自动泊车技术解析
- 甘肃省2025年甘肃高三月考试卷(四4月)(甘肃二诊)(数学试题+答案)
- 2025年中小学教师资格考试的重要试题及答案
- 微训练 一文多考 备考高效之诗歌《苏幕遮・燎沉香》教师版
- 2025届山东省济南市一模生物试题(原卷版+解析版)
- 海南地理会考试卷及答案2024
- 全国河大音像版初中信息技术八年级上册第三章第三节《循环结构程序设计》教学设计
- 企业健康管理计划规划方案讨论
- 隧道高空作业施工方案
- 危险性较大的分部分项工程专项施工方案严重缺陷清单(试行)
- 深信服超融合HCI技术白皮书-20230213
- 2025年陕西省土地工程建设集团有限责任公司招聘笔试参考题库附带答案详解
评论
0/150
提交评论