Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: HYY514

[练习]数组随机数竟赛题

[复制链接]
发表于 2008-6-26 21:57 | 显示全部楼层

<p>再改一下还是差不多</p><p>Sub test()<br/>t = Timer<br/>Dim l As Long, l2 As Long<br/>Dim dic As New Dictionary<br/>&nbsp;&nbsp; For l2 = 1 To 65536<br/>&nbsp;&nbsp; l = Int(65536 * Rnd + 1)<br/>&nbsp;&nbsp; Do While dic.Exists(l)<br/>&nbsp;&nbsp;&nbsp;&nbsp; l = Int(65536 * Rnd + 1)<br/>&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp; dic(l) = 1<br/>&nbsp;&nbsp; Next<br/>Range("A1:A65536") = Application.Transpose(dic.Keys)<br/>MsgBox Timer - t<br/>End Sub</p>
[此贴子已经被作者于2008-6-26 22:02:12编辑过]
回复

使用道具 举报

发表于 2008-6-26 23:41 | 显示全部楼层

这样遇到重复就要重新Rnd(),重新Rnd()又可能再重复,所以怎么快也快不过兰版的直接取Rnd()后,取过的移到底下,下一次的Rnd()是在未用过的范围Rnd(),怎么都不重复,哈哈,长见识了,能学到高人的高招,睡觉都会笑!
回复

使用道具 举报

发表于 2008-6-26 23:48 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>oobird</i>在2008-6-26 23:41:00的发言:</b><br/>这样遇到重复就要重新Rnd(),重新Rnd()又可能再重复,所以怎么快也快不过兰版的直接取Rnd()后,取过的移到底下,下一次的Rnd()是在未用过的范围Rnd(),怎么都不重复,哈哈,长见识了,能学到高人的高招,睡觉都会笑!</div><p></p>这位 <strong>oobird </strong>也是高手啊!很高兴看到你的光临!还望多指教![em02]
回复

使用道具 举报

发表于 2008-6-27 10:06 | 显示全部楼层

<p>学习学习</p>
回复

使用道具 举报

发表于 2008-6-27 10:46 | 显示全部楼层

Sub test()<br/>&nbsp;&nbsp;&nbsp; Dim iArr(1 To 65536) As Long<br/>&nbsp;&nbsp;&nbsp; Dim i As Long<br/>&nbsp;&nbsp;&nbsp; Dim r As Long<br/>&nbsp;&nbsp;&nbsp; Dim temp As Long<br/>&nbsp;&nbsp;&nbsp; Dim mTime As Variant<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; mTime = Timer<br/>&nbsp;&nbsp;&nbsp; Application.Volatile<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; For i = 1 To 65536<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iArr(i) = i<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; For i = 65536 To 2 Step -1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r = Int(Rnd() * i) + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp = iArr(r)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iArr(r) = iArr(i)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iArr(i) = temp<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Range("A1:A65536") = Application.Transpose(iArr)<br/>&nbsp;&nbsp;&nbsp; MsgBox "运行时间: " &amp; Format(Timer - mTime, "0.000") &amp; "秒"<br/>End Sub
回复

使用道具 举报

发表于 2008-6-27 16:49 | 显示全部楼层

<p>楼上的代码和楼主的思路差不多吧</p><p>飞翔的奖励呢?等着接收呢</p>[em01]
回复

使用道具 举报

发表于 2008-6-27 16:54 | 显示全部楼层

嗯,真是一样,差个计数点
回复

使用道具 举报

发表于 2008-6-27 21:34 | 显示全部楼层

学习一下。
回复

使用道具 举报

发表于 2008-6-30 21:02 | 显示全部楼层

<p>学习</p>
回复

使用道具 举报

发表于 2008-7-3 10:13 | 显示全部楼层

[em03][em04][em05]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-4 23:14 , Processed in 0.295436 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表