|
<p>刚学完数组出个练习题:</p><p>用VBA在A1:A65536 单元格产生<font color="#ee1111">不重复</font><font color="#000000">随机数</font>,随机数范围1至65536,包括1和65536,</p><p><font color="#2222dd">运行时间少于1秒钟的,金子奖励.</font></p><p><font color="#2222dd">以回复可见方式进行回复,</font></p><p><font color="#2222dd">参考答案在结贴时会发布.</font></p><p><font color="#2222dd"></font> -------------------------------------------------------</p><p><font color="#d52b6f">呵呵,履行诺言结帖,代码运行在一秒内的到这里领BB(本来想把此帖直接编辑成赠送帖却不行)</font></p><p><font color="#d52b6f">依代码运行效率论赏,不报到者,即为自动弃权,哈哈[em07][em01]</font></p><p><font color="#d52b6f"></font> </p><p><a href="http://excelpx.com/dispbbs.asp?boardid=99&id=58968">http://excelpx.com/dispbbs.asp?boardid=99&id=58968</a></p><p><font color="#2222dd"></font>--------------------------------------------------------- </p><p><font color="#2222dd"></font> 练习题原本是发给VBA入门班的,既然转到这里来了,</p><p>也把我原来的代码发上来,欢迎分享更好的思路:</p><p>Sub fx1()<br/>Dim a(1 To 65536, 0) As Long<br/>Dim tmp As Long<br/>Dim n As Long<br/>Dim i As Long<br/>Dim t As Double<br/>t = Timer</p><p>For i = 1 To 65536<br/> a(i, 0) = i<br/>Next<br/>For i = 1 To 65536<br/> n = Int(Rnd * 65536 + 1)<br/> tmp = a(i, 0)<br/> a(i, 0) = a(n, 0)<br/> a(n, 0) = tmp<br/>Next<br/>Range("a1:a65536") = a<br/>MsgBox Timer - t<br/>End Sub</p><p>Sub fx2()<br/>Dim a(1 To 65536, 0) As Long<br/>Dim tmp As Long<br/>Dim n As Long<br/>Dim i As Long<br/>Dim t As Double<br/>t = Timer<br/>For i = 1 To 65536<br/> n = Int(Rnd * 65536 + 1)<br/> tmp = IIf(a(i, 0) = 0, i, a(i, 0))<br/> a(i, 0) = IIf(a(n, 0) = 0, n, a(n, 0))<br/> a(n, 0) = tmp<br/>Next<br/>[a1:a65536] = a<br/>MsgBox Timer - t<br/>End Sub</p><p><br/>'另:<br/>Sub 检验数据是否有重复()<br/>Dim d As Object<br/>Dim i As Long<br/>Dim bol As Boolean<br/>Dim ar, s As String<br/>ar = [a1:a65536]<br/>Set d = CreateObject("scripting.dictionary")<br/>For i = 1 To 65536<br/> s = ar(i, 1)<br/> If s <> "" Then<br/> If d(s) = "" Then<br/> d(s) = 1<br/> Else<br/> d(s) = d(s) + 1<br/> MsgBox s & "重复" & vbCrLf & d(s) & "个"<br/> bol = True<br/> End If<br/> If s > 65536 Or s <= 0 Then MsgBox s & vbCrLf & "随机数范围错误!"<br/> End If<br/>Next<br/> If Not (bol) Then MsgBox "没有重复"<br/>End Sub<br/></p>
[此贴子已经被作者于2008-6-27 21:47:33编辑过] |
|