Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2502|回复: 3

请比较下面3个代码的不同

[复制链接]
发表于 2011-1-10 21:10 | 显示全部楼层 |阅读模式
10学分
下面是三个产生一个由0-9十个数字组成的6位数的代码,组成这个6位数的每个数字不一样,包括首位是0的情况  如012345 ,987320 .......

代码1:
Function SJS() As String
    Dim StrA$, iPos%, Temp$, Count%
    StrA = "0123456789"
    Count = 10
    Randomize
    For i = 1 To 6
        iPos% = Int(Rnd() * Count% + 1)
        Temp$ = Mid$(StrA$, iPos%, 1)
        SJS$ = SJS$ & Temp$
        Mid$(StrA$, iPos%, 1) = Mid$(StrA$, Count%, 1)
        Mid$(StrA$, Count%, 1) = Temp$
        Count% = Count% - 1
    Next i
    Application.Volatile
End Function


代码2

Function sjs()
Application.Volatile
Dim i As Integer, j As Integer, A(1 To 6) As Integer
For i = 1 To 6
    Randomize '更改产生随机数的种子
    A(i) = Int(10 * Rnd)
    For j = 1 To i - 1
        If A(j) = A(i) Then
            i = i - 1
            Exit For
        End If
    Next j
Next i
sjs = A(1) & A(2) & A(3) & A(4) & A(5) & A(6)

End Function


代码3
Function SJS() As String
Application.Volatile
Randomize
Dim i, j As Integer
Dim iFlag As Boolean
SJS = Int(Rnd() * 10)
For i = 1 To 5
iFlag = True
Do While iFlag
j = Int(Rnd() * 10)
If InStr(SJS, j) = 0 Then iFlag = False
Loop
SJS = SJS & j
Next i
End Function


请教这三个代码产生的随机6个不同数字的组合 谁的随机性最强,符合随机性原理? 说出理由 .另外 三个代码中randmize语句的使用位置是否得当

发表于 2011-1-10 21:19 | 显示全部楼层
楼主你都测试过代码了,哪个随机性强应该很清楚了。
RND产生的伪随机数也和你说过了,是伪随机数就是有一定规律可循的,像你这个上百万的数据测试肯定有问题的。
回复

使用道具 举报

 楼主| 发表于 2011-1-10 21:30 | 显示全部楼层
本帖最后由 zqsh000 于 2011-1-10 21:40 编辑

回复 阿童木 的帖子

呵呵,大哥的头像......
我就是测试不清楚,总是觉得这三个代码产生的随机数分布是有区别的, 所以想从原理上知道这三个代码产生的随机数究竟区别在哪里
回复

使用道具 举报

发表于 2011-1-28 15:06 | 显示全部楼层
随机数的随机很难测试吧
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 01:23 , Processed in 0.689830 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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