首页 VB生成不重复随机数

VB生成不重复随机数

举报
开通vip

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

VB生成不重复随机数
VB生成不重复的随机数VB生成不重复的随机数我的建议是:第一步、先做一个数组,存上这35个数(可以不是连续的数,也可以是人名、字符串什么的);第二步、随机生成一个1-35之间的数,输出;第三步:把这个数和数组的第一个单元交换;第四步、从数组的第2-35之间随机抽取第二个数,输出;第五步、把这随机抽取的第二个数和数组的第二个单元 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 呼唤;第六步、随机抽取第三个数,输出。。。。。重复到从第35-35个数之间随机抽取一个数,这时直接输出最后一个就行了。程序如下(VB6):工程里默认的窗体上,画一个Commandl,粘贴程序:optionexplicitprivatevArray(1to35)ascurrency'定义数组个数privatesubcommand1_click()testendsubprivatesubInitArray()dimiaslong'给数组赋值fori=1to35varray(i)=inextiendsubprivatesubTest()dimiStartaslongdimiPosaslongdimvTempascurrencydimsReturnasstringInitArrayrandomizetimer'设置随机因子,使其每次运行程序的随机数都不一样iStart=1doiPos=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'下次随机生成时,少生成一个ifiStart>=ubound(vArray)then'最后一个了,直接输出sReturn=sReturn&vArray(ubound(vArray))ExitDoendififiStart>7thenexitdo'如果需要生成几个数,就把7改成几,大于数组元素的个数,将输出速度的元素个数(这个例子是35)LoopmsgboxsReturn'msgbox输出结果endsub'================================================================'方法二PrivateSubCommand1_Click()Dima(35)AsIntegerFori=0To35way1:Randomizea(i)=Int(Rnd()*36)+1Ifi>1ThenForp=0Toi-1Ifa(p)=a(i)Then''与前面的对比,如果有重复,重新随机GoToway1EndIfNextpEndIfPrinta(i);'打印NextiPrint""'打印EndSub'================================================================'方法三如果楼主是要产生0-9等10个不重复的随机数的话,在随机数范围和个数相等的情况下,楼上的方法都无异于散弹打鸟。在最不利情况下时间将无限延长,特别是对更多随机数的时候。以下提供两种思路:1.实际上我们只要确定了其中9个数字那么第10个数字根本不用去想;确定8个,那么随机只在2个数之间,以此类推,使用动态数组如a(),先用for将10个数字加入,然后开始rnd*ubound(a)取得其中一个,放入数组b,再将该数字从a数组中剔除。速度:(n+nA2)/22.只需要得到10个无序排列的数字即可,没必要去一直产生随机数,只要打乱顺序即可。在数组a中加入10个数字,然后开始for循环10次,每次产生一个10以内的随机数,然后将循环次数i与随机数的位置互换。速度:n'================================================================'方法四关于随机数的不重复求取OptionBase1PrivateSubCommand1_Click()RandomizeTimerDimA(1To10)AsInteger'数组MDimB(1To8)AsString'数组NDimiAsInteger,kAsInteger,tAsIntegerFori=1To10A(i)=iNextFori=1To10'数组打乱t=A(i)k=Fix(Rnd*10)+1A(i)=A(k)A(k)=tNextFori=1To8'从M中随机取出N个数,不重复B(i)=A(i)NextLabel1.Caption=Join(B(),",")EndSub'方法五======================================================PrivateSubCommand2_Click()RandomizeTimerDimDimension(8)DimiAsByte,jAsByteRandomizeTimerFori=1To8Dimension(i)=Fix(Rnd*10)+1NextiA:Fori=1To7Forj=i+1To8IfDimension(i)=Dimension(j)ThenDimension(i)=Fix(Rnd*10)+1GoToAEndIfNextjNextiLabel1.Caption=Join(Dimension(),",")EndSubPrivateSubCommand3_Click()EndEndSub';==============================================================='方法六:(最快)还有种方法是随机取数组中一个数,取出后将该元素与数组最后一个元素交换,然后随机上限减一然后就是字符串的速度了...一次分配足够大的字符串,而不是用&连接字符串会快很多OptionExplicitPrivateDeclareFunctiontimeGetTimeLib"winmm.dll"()AsLongPrivateConstMAX_N=10000-1'在1~(MAX_N+1)的数字中取PrivateSubCommand1_Click()DimAry(MAX_N)AsLongDimi&,n&,p&,t&,ps&Dims$,sTemp$t=timeGetTime'初始化Fori=0ToMAX_NAry(i)=i+1NextRandomize''计算并为s分配足够的大小,下面是当n=MAX_N+1时最终的s的长度的精确值'i=MAX_N+1:p=0:ps=9'DoUntili<=9'p=p+1'n=n+ps*p'ps=ps*10'i=i\10'Loop'n=n+(p+1)*(MAX_N-CLng(10Ap)+2)+MAX_N's=String$(n,",")n=MAX_N\2'要取的个数,取所有的话用MAX_N+1'计算并为s分配足够的大小s=String$(n*Len(CStr(MAX_N+1)),",")'分配足够大的内存,以后再减-p=0:ps=1DoUntilp>=ni=CLng(Rnd*(MAX_N-p))sTemp=CStr(Ary(i))Mid$(s,ps,Len(sTemp))=sTempps=ps+Len(sTemp)+1Ary(i)=Ary(MAX_N-p)'如果不想破坏数据,把这里改成2个元素交换,而不是简单赋值p=p+1'抛弃数组最后一个元素Loops=Left$(s,ps-2)'去掉多余的部分t=timeGetTime-tDebug.Prints'输出Debug.PrintCStr(t),Len(s)EndSub'==============================================================='方法七:(最快)OptionExplicitOptionBase1PrivateDeclareFunctiontimeGetTimeLib"winmm.dll"()AsLongConstNums=10000PrivateSubCommand1_Click()DimtAsLongDimNum(Nums)AsLongDimi,nAsLongDimsAsStringt=timeGetTimeRandomizeFori=1ToNumsn=Int(Rnd*Nums)+1IfNum(n)=0ThenNum(n)=ns=s&n&","Elsei=i-1EndIfNextiText1.Text=st=timeGetTime-tMsgBoxtEndSub
本文档为【VB生成不重复随机数】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
花果山庄乐园
暂无简介~
格式:doc
大小:9KB
软件:Word
页数:8
分类:
上传时间:2023-03-09
浏览量:2